{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 在 Rental Listing Inquiries 数据上练习分类方法\n",
    "Rental Listing Inquiries 数据集是 Kaggle 平台上的一个分类竞赛任务，需要根据 公寓的特征来预测其受欢迎程度(用户感兴趣程度分为高、中、低三类)。其 中房屋的特征 x 共有 14 维，响应值 y 为用户对该公寓的感兴趣程度。评价标准为 logloss。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# import tool kit\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "color = sns.color_palette()\n",
    "\n",
    "# 评论标准为logloss\n",
    "from sklearn.metrics import log_loss\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>building_id</th>\n",
       "      <th>created</th>\n",
       "      <th>description</th>\n",
       "      <th>display_address</th>\n",
       "      <th>features</th>\n",
       "      <th>interest_level</th>\n",
       "      <th>latitude</th>\n",
       "      <th>listing_id</th>\n",
       "      <th>longitude</th>\n",
       "      <th>manager_id</th>\n",
       "      <th>photos</th>\n",
       "      <th>price</th>\n",
       "      <th>street_address</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>53a5b119ba8f7b61d4e010512e0dfc85</td>\n",
       "      <td>2016-06-24 07:54:24</td>\n",
       "      <td>A Brand New 3 Bedroom 1.5 bath ApartmentEnjoy ...</td>\n",
       "      <td>Metropolitan Avenue</td>\n",
       "      <td>[]</td>\n",
       "      <td>medium</td>\n",
       "      <td>40.7145</td>\n",
       "      <td>7211212</td>\n",
       "      <td>-73.9425</td>\n",
       "      <td>5ba989232d0489da1b5f2c45f6688adc</td>\n",
       "      <td>[https://photos.renthop.com/2/7211212_1ed4542e...</td>\n",
       "      <td>3000</td>\n",
       "      <td>792 Metropolitan Avenue</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10000</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>c5c8a357cba207596b04d1afd1e4f130</td>\n",
       "      <td>2016-06-12 12:19:27</td>\n",
       "      <td></td>\n",
       "      <td>Columbus Avenue</td>\n",
       "      <td>[Doorman, Elevator, Fitness Center, Cats Allow...</td>\n",
       "      <td>low</td>\n",
       "      <td>40.7947</td>\n",
       "      <td>7150865</td>\n",
       "      <td>-73.9667</td>\n",
       "      <td>7533621a882f71e25173b27e3139d83d</td>\n",
       "      <td>[https://photos.renthop.com/2/7150865_be3306c5...</td>\n",
       "      <td>5465</td>\n",
       "      <td>808 Columbus Avenue</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100004</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>c3ba40552e2120b0acfc3cb5730bb2aa</td>\n",
       "      <td>2016-04-17 03:26:41</td>\n",
       "      <td>Top Top West Village location, beautiful Pre-w...</td>\n",
       "      <td>W 13 Street</td>\n",
       "      <td>[Laundry In Building, Dishwasher, Hardwood Flo...</td>\n",
       "      <td>high</td>\n",
       "      <td>40.7388</td>\n",
       "      <td>6887163</td>\n",
       "      <td>-74.0018</td>\n",
       "      <td>d9039c43983f6e564b1482b273bd7b01</td>\n",
       "      <td>[https://photos.renthop.com/2/6887163_de85c427...</td>\n",
       "      <td>2850</td>\n",
       "      <td>241 W 13 Street</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100007</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>28d9ad350afeaab8027513a3e52ac8d5</td>\n",
       "      <td>2016-04-18 02:22:02</td>\n",
       "      <td>Building Amenities - Garage - Garden - fitness...</td>\n",
       "      <td>East 49th Street</td>\n",
       "      <td>[Hardwood Floors, No Fee]</td>\n",
       "      <td>low</td>\n",
       "      <td>40.7539</td>\n",
       "      <td>6888711</td>\n",
       "      <td>-73.9677</td>\n",
       "      <td>1067e078446a7897d2da493d2f741316</td>\n",
       "      <td>[https://photos.renthop.com/2/6888711_6e660cee...</td>\n",
       "      <td>3275</td>\n",
       "      <td>333 East 49th Street</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100013</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>2016-04-28 01:32:41</td>\n",
       "      <td>Beautifully renovated 3 bedroom flex 4 bedroom...</td>\n",
       "      <td>West 143rd Street</td>\n",
       "      <td>[Pre-War]</td>\n",
       "      <td>low</td>\n",
       "      <td>40.8241</td>\n",
       "      <td>6934781</td>\n",
       "      <td>-73.9493</td>\n",
       "      <td>98e13ad4b495b9613cef886d79a6291f</td>\n",
       "      <td>[https://photos.renthop.com/2/6934781_1fa4b41a...</td>\n",
       "      <td>3350</td>\n",
       "      <td>500 West 143rd Street</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        bathrooms  bedrooms                       building_id  \\\n",
       "10            1.5         3  53a5b119ba8f7b61d4e010512e0dfc85   \n",
       "10000         1.0         2  c5c8a357cba207596b04d1afd1e4f130   \n",
       "100004        1.0         1  c3ba40552e2120b0acfc3cb5730bb2aa   \n",
       "100007        1.0         1  28d9ad350afeaab8027513a3e52ac8d5   \n",
       "100013        1.0         4                                 0   \n",
       "\n",
       "                    created  \\\n",
       "10      2016-06-24 07:54:24   \n",
       "10000   2016-06-12 12:19:27   \n",
       "100004  2016-04-17 03:26:41   \n",
       "100007  2016-04-18 02:22:02   \n",
       "100013  2016-04-28 01:32:41   \n",
       "\n",
       "                                              description  \\\n",
       "10      A Brand New 3 Bedroom 1.5 bath ApartmentEnjoy ...   \n",
       "10000                                                       \n",
       "100004  Top Top West Village location, beautiful Pre-w...   \n",
       "100007  Building Amenities - Garage - Garden - fitness...   \n",
       "100013  Beautifully renovated 3 bedroom flex 4 bedroom...   \n",
       "\n",
       "            display_address  \\\n",
       "10      Metropolitan Avenue   \n",
       "10000       Columbus Avenue   \n",
       "100004          W 13 Street   \n",
       "100007     East 49th Street   \n",
       "100013    West 143rd Street   \n",
       "\n",
       "                                                 features interest_level  \\\n",
       "10                                                     []         medium   \n",
       "10000   [Doorman, Elevator, Fitness Center, Cats Allow...            low   \n",
       "100004  [Laundry In Building, Dishwasher, Hardwood Flo...           high   \n",
       "100007                          [Hardwood Floors, No Fee]            low   \n",
       "100013                                          [Pre-War]            low   \n",
       "\n",
       "        latitude  listing_id  longitude                        manager_id  \\\n",
       "10       40.7145     7211212   -73.9425  5ba989232d0489da1b5f2c45f6688adc   \n",
       "10000    40.7947     7150865   -73.9667  7533621a882f71e25173b27e3139d83d   \n",
       "100004   40.7388     6887163   -74.0018  d9039c43983f6e564b1482b273bd7b01   \n",
       "100007   40.7539     6888711   -73.9677  1067e078446a7897d2da493d2f741316   \n",
       "100013   40.8241     6934781   -73.9493  98e13ad4b495b9613cef886d79a6291f   \n",
       "\n",
       "                                                   photos  price  \\\n",
       "10      [https://photos.renthop.com/2/7211212_1ed4542e...   3000   \n",
       "10000   [https://photos.renthop.com/2/7150865_be3306c5...   5465   \n",
       "100004  [https://photos.renthop.com/2/6887163_de85c427...   2850   \n",
       "100007  [https://photos.renthop.com/2/6888711_6e660cee...   3275   \n",
       "100013  [https://photos.renthop.com/2/6934781_1fa4b41a...   3350   \n",
       "\n",
       "                 street_address  \n",
       "10      792 Metropolitan Avenue  \n",
       "10000       808 Columbus Avenue  \n",
       "100004          241 W 13 Street  \n",
       "100007     333 East 49th Street  \n",
       "100013    500 West 143rd Street  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# read train data, and look head info\n",
    "train = pd.read_json(\"train.json\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### 数据类型相对比较多，特征14维，interest_level为y，分类结果为medium、low、high三种。特征中包含数字、类别、字符串、文本、图片等，需要对数据进行特征工程的处理。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 49352 entries, 10 to 99994\n",
      "Data columns (total 15 columns):\n",
      "bathrooms          49352 non-null float64\n",
      "bedrooms           49352 non-null int64\n",
      "building_id        49352 non-null object\n",
      "created            49352 non-null object\n",
      "description        49352 non-null object\n",
      "display_address    49352 non-null object\n",
      "features           49352 non-null object\n",
      "interest_level     49352 non-null object\n",
      "latitude           49352 non-null float64\n",
      "listing_id         49352 non-null int64\n",
      "longitude          49352 non-null float64\n",
      "manager_id         49352 non-null object\n",
      "photos             49352 non-null object\n",
      "price              49352 non-null int64\n",
      "street_address     49352 non-null object\n",
      "dtypes: float64(3), int64(3), object(9)\n",
      "memory usage: 6.0+ MB\n"
     ]
    }
   ],
   "source": [
    "# data info\n",
    "train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### 所有特征数据没有空值数据，不需要做空值处理。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>latitude</th>\n",
       "      <th>listing_id</th>\n",
       "      <th>longitude</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>49352.00000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>4.935200e+04</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>4.935200e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1.21218</td>\n",
       "      <td>1.541640</td>\n",
       "      <td>40.741545</td>\n",
       "      <td>7.024055e+06</td>\n",
       "      <td>-73.955716</td>\n",
       "      <td>3.830174e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.50142</td>\n",
       "      <td>1.115018</td>\n",
       "      <td>0.638535</td>\n",
       "      <td>1.262746e+05</td>\n",
       "      <td>1.177912</td>\n",
       "      <td>2.206687e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>6.811957e+06</td>\n",
       "      <td>-118.271000</td>\n",
       "      <td>4.300000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.00000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>40.728300</td>\n",
       "      <td>6.915888e+06</td>\n",
       "      <td>-73.991700</td>\n",
       "      <td>2.500000e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.00000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>40.751800</td>\n",
       "      <td>7.021070e+06</td>\n",
       "      <td>-73.977900</td>\n",
       "      <td>3.150000e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.00000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>40.774300</td>\n",
       "      <td>7.128733e+06</td>\n",
       "      <td>-73.954800</td>\n",
       "      <td>4.100000e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>10.00000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>44.883500</td>\n",
       "      <td>7.753784e+06</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.490000e+06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         bathrooms      bedrooms      latitude    listing_id     longitude  \\\n",
       "count  49352.00000  49352.000000  49352.000000  4.935200e+04  49352.000000   \n",
       "mean       1.21218      1.541640     40.741545  7.024055e+06    -73.955716   \n",
       "std        0.50142      1.115018      0.638535  1.262746e+05      1.177912   \n",
       "min        0.00000      0.000000      0.000000  6.811957e+06   -118.271000   \n",
       "25%        1.00000      1.000000     40.728300  6.915888e+06    -73.991700   \n",
       "50%        1.00000      1.000000     40.751800  7.021070e+06    -73.977900   \n",
       "75%        1.00000      2.000000     40.774300  7.128733e+06    -73.954800   \n",
       "max       10.00000      8.000000     44.883500  7.753784e+06      0.000000   \n",
       "\n",
       "              price  \n",
       "count  4.935200e+04  \n",
       "mean   3.830174e+03  \n",
       "std    2.206687e+04  \n",
       "min    4.300000e+01  \n",
       "25%    2.500000e+03  \n",
       "50%    3.150000e+03  \n",
       "75%    4.100000e+03  \n",
       "max    4.490000e+06  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1076e8d68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# target 分布，各类样本分布是否均衡\n",
    "sns.countplot(train.interest_level)\n",
    "plt.xlabel('Interest Level')\n",
    "plt.ylabel('Number of Occurrences')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### 兴趣为low的房子最多，其次是medium，兴趣为high的最少，和常理差不多。但和中国抢房的时期不同。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征工程\n",
    "对数值型特征进行分析。\n",
    "bathrooms\n",
    "bedrooms\n",
    "price\n",
    "latitude\n",
    "longitude"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 单一变量分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a0e39dba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Bathrooms\n",
    "cnt_srs = train['bathrooms'].value_counts()\n",
    "\n",
    "plt.figure(figsize=(8,4))\n",
    "sns.barplot(cnt_srs.index, cnt_srs.values, alpha=0.8, color=color[0])\n",
    "plt.ylabel('Number of Occurrences', fontsize=12)\n",
    "plt.xlabel('bathrooms', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:2: DeprecationWarning: \n",
      ".ix is deprecated. Please use\n",
      ".loc for label based indexing or\n",
      ".iloc for positional indexing\n",
      "\n",
      "See the documentation here:\n",
      "http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated\n",
      "  \n",
      "/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:179: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  self._setitem_with_indexer(indexer, value)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nCrxkZs8nHvsaMB3A3X8GnAt8zsyiQDdwvmvKLJGMU1ZWNrA8YcKENFYiInszJgHv7ksB28c6NwA3\njEU9IrL/Jk6cOLCsY/AimUt/nSIyIskteBHJXAp4ERkRDawTGR8U8CIyIomxsCKS4RTwIiIiWUgB\nLyIikoUU8CIiIllIAS8iIpKFFPAiIiJZSAEvIiJppUlLR4cCXkREJAsp4EVEJK3651ZQSz61FPAi\nIpIRNIlSaingRUQkrfpb7mrBp5YCXkRGRBthSbWenp50l5CVFPAHkWg0mu4SJAu0tbUNLCvsJRW2\nbdsGQCwWS3Ml2UUBn+Xa29sHll9++eU0ViLZ4qmnnhpYXrduXfoKkazxyiuvABCJRNJcSXZRwGe5\nxx57bGD5r3/9axorkWwQjUa5/77fkxMCA+699950lyRZ4Omnnwagq6uLhoaGNFeTPRTwWWzDhg1c\n/8Mf4iVVRCrncd999/Hkk0+muywZx66//npWrnqFTy/o5J3Te3jggQf44x//mO6yZBx78cUXeeaZ\nZ4jPiWNh47bbbkt3SVlDAZ+lVq9ezWWXXU5v1Omeeyp9M9+CF5fz/66+WiEvI9bV1cW1117L/fff\nz9kzejixto8L5nazcHKU/7r2Wu6++24dP5URa29v59prr8UKDT/Sic2J8aeH/6RtVIoo4LNMLBbj\nV7/6FZ/69KfZ3LKVrrlvx/NLIJRD99zT6PJ8Lr/8cq699lq6urrSXa6MAy+++CKf+PjH+MMDD3DG\n9B4+MLcbgHAILjqigyMn9fCTn/yEL118MZs2bUpztTJe9Pb2csUVV7D+jfVEj4tCDvhhjk0yvnHl\nN3jppZfSXeK4Z+N5FOyiRYt82bJl6S4jY7zyyitcd/31rHz5ZaKTZtA76yTILdx1pXiU3I3LyWtY\nQXVNDRdf9EVOOukkTTAhu9m2bRs33XQTf/zjYioK4TML2pk/afczMdxhaUMev3i9BA/l8uGPfJTz\nzz+f/Pz8NFQt40F3dzdf+/rXWL5sOfE3x/FpSTnUAzmP5lAQLeDa/7yWI444In2FZigzW+7ui/a5\n3lgEvJlNA34B1ABx4EZ3v37QOgZcD5wJdAEfc/dn9/a+CvhAa2srN954I3/605+wvEJ6ph5PtGIu\n7CW0QzsaKFz/BHRt45hjjuGiiy5izpw5Y1i1ZKpIJMK9997L7bfdRm9PN++Y2sO5c7opyNn767b0\n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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108bd1978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# bathrooms interest_level 核密度函数\n",
    "train['bathrooms'].ix[train['bathrooms']>3] =3\n",
    "plt.figure(figsize=(8,4))\n",
    "sns.violinplot(x='interest_level', y='bathrooms', data=train)\n",
    "plt.xlabel('Interest level', fontsize=12)\n",
    "plt.ylabel('bathrooms', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### 从概率密度函数上看，是均匀分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n8v8BXZsGmu0IFFwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a322cc470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# bedrooms\n",
    "cnt_srs = train['bedrooms'].value_counts()\n",
    "\n",
    "plt.figure(figsize=(8,4))\n",
    "sns.barplot(cnt_srs.index, cnt_srs.values, alpha=0.8, color=color[1])\n",
    "plt.ylabel('Number of Occurrences', fontsize=12)\n",
    "plt.xlabel('bedrooms', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nzCr4/zefpHhMopk9AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a322bde80>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,4))\n",
    "sns.countplot(x='bedrooms', hue='interest_level', data=train)\n",
    "plt.xlabel('bedrooms', fontsize=12)\n",
    "plt.ylabel('Number of Occurrences', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaUAAAENCAYAAACvnXotAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFkFJREFUeJzt3X+w3XV95/Hny/BDrD/Cj+hAAgZX\nhhHXVvAOZuvOjoNWorgm09pZ3LqyyjZbq1s77VBhnV21ZWe07KyU1lpRWMGxAkUWKcJmsyrTdovA\nTSMi0pQrooRQiQOhdMwgxPf+cT4XT+JNuOf23ns+yX0+Zs6c7/f9/XzP9/NJzs0r3+/53PNNVSFJ\nUg+eNe4OSJI0zVCSJHXDUJIkdcNQkiR1w1CSJHXDUJIkdcNQkiR1w1CSJHXDUJIkdeOQcXfgQHLM\nMcfU6tWrx90NSTqgbN68+QdVtWI2bQ2lEaxevZrJyclxd0OSDihJvjvbtl6+kyR1w1CSJHXDUJIk\ndcNQkiR1w1CSJHXD2XeSpH26fsuDXLRxK9t37uK45Udw3pkns/7UlQt2PENJkjSj67c8yAXX3cWu\nJ3cD8ODOXVxw3V0ACxZMXr6TJM3ooo1bnw6kabue3M1FG7cu2DENJUnSjLbv3DVSfT4YSpKkGR23\n/IiR6vPBUJIkzei8M0/miEOX7VE74tBlnHfmyQt2TCc6SJJmND2Zwdl3kqQurD915YKG0N68fCdJ\n6oahJEnqhqEkSeqGoSRJ6oahJEnqhqEkSeqGoSRJ6oahJEnqhqEkSeqGoSRJ6oahJEnqhqEkSeqG\noSRJ6saihlKSZUm2JLmxrZ+Y5LYk9ya5OslhrX54W59q21cPvcYFrb41yZlD9bWtNpXk/KH6yMeQ\nJI3HYp8pvQ+4Z2j9o8DHquok4FHg3FY/F3i0ql4KfKy1I8kpwNnAy4G1wB+3oFsGfBx4I3AK8LbW\nduRjSJLGZ9FCKckq4Czg0209wBnAta3JFcD6tryurdO2v661XwdcVVVPVNV3gCng9PaYqqr7qupH\nwFXAujkeQ5I0Jot5pnQx8DvAj9v60cDOqnqqrW8Dpu8ktRJ4AKBtf6y1f7q+1z77qs/lGJKkMVmU\nUEryZuDhqto8XJ6haT3DtvmqP9Pxn5ZkQ5LJJJM7duyYYRdJ0nxZrDOl1wBvSXI/g0trZzA4c1qe\nZPqW7KuA7W15G3A8QNv+AuCR4fpe++yr/oM5HGMPVXVpVU1U1cSKFSvmMnZJ0iwtSihV1QVVtaqq\nVjOYqPCVqvoV4KvAW1uzc4AvtuUb2jpt+1eqqlr97DZz7kTgJOB24A7gpDbT7rB2jBvaPqMeQ5I0\nJoc8c5MF9X7gqiQXAluAy1r9MuCzSaYYnL2cDVBVdye5BvgW8BTwnqraDZDkvcBGYBlweVXdPZdj\nSJLGJ54czN7ExERNTk6OuxuSdEBJsrmqJmbT1m90kCR1w1CSJHXDUJIkdcNQkiR1w1CSJHXDUJIk\ndcNQkiR1w1CSJHXDUJIkdcNQkiR1w1CSJHXDUJIkdcNQkiR1w1CSJHXDUJIkdcNQkiR1w1CSJHXD\nUJIkdcNQkiR1w1CSJHXDUJIkdcNQkiR1w1CSJHXDUJIkdcNQkiR1w1CSJHXDUJIkdcNQkiR1w1CS\nJHXDUJIkdcNQkiR1w1CSJHXDUJIkdcNQkiR1w1CSJHVjUUIpybOT3J7kziR3J/lwq5+Y5LYk9ya5\nOslhrX54W59q21cPvdYFrb41yZlD9bWtNpXk/KH6yMeQJI3HYp0pPQGcUVU/B7wSWJtkDfBR4GNV\ndRLwKHBua38u8GhVvRT4WGtHklOAs4GXA2uBP06yLMky4OPAG4FTgLe1tox6DEnS+CxKKNXAP7bV\nQ9ujgDOAa1v9CmB9W17X1mnbX5ckrX5VVT1RVd8BpoDT22Oqqu6rqh8BVwHr2j6jHkOSNCaL9plS\nO6P5OvAwsAn4NrCzqp5qTbYBK9vySuABgLb9MeDo4fpe++yrfvQcjiFJGpNFC6Wq2l1VrwRWMTiz\nedlMzdrzTGcsNY/1/R1jD0k2JJlMMrljx44ZdpEkzZdFn31XVTuBW4A1wPIkh7RNq4DtbXkbcDxA\n2/4C4JHh+l777Kv+gzkcY+/+XlpVE1U1sWLFirkNWpI0K4s1+25FkuVt+Qjg9cA9wFeBt7Zm5wBf\nbMs3tHXa9q9UVbX62W3m3InAScDtwB3ASW2m3WEMJkPc0PYZ9RiSpDE55JmbzItjgSvaLLlnAddU\n1Y1JvgVcleRCYAtwWWt/GfDZJFMMzl7OBqiqu5NcA3wLeAp4T1XtBkjyXmAjsAy4vKrubq/1/lGO\nIUkan3hyMHsTExM1OTk57m5I0gElyeaqmphNW7/RQZLUDUNJktQNQ0mS1A1DSZLUDUNJktQNQ0mS\n1A1DSZLUDUNJktQNQ0mS1A1DSZLUDUNJktQNQ0mS1A1DSZLUDUNJktQNQ0mS1A1DSZLUjZFDKcnx\nSdYsRGckSUvbrEMpyQlJ/h/wt8D/bbW3Jvn0QnVOkrS0jHKm9EngS8DzgCdbbRPwC/PdKUnS0nTI\nCG1PB86qqh8nKYCqeizJCxama5KkpWaUM6XvAy8dLiQ5BfjevPZIkrRkjRJK/x24Mck7gUOSvA24\nGvjogvRMkrTkzPryXVVdnuQRYAPwAPAO4L9U1fUL1TlJ0tIyymdKtAAyhCRJC2KUKeGXJPn5vWo/\nn+Ti+e+WJGkpGuUzpbcBk3vVNgP/dv66I0laykYJpZqh/bIRX0OSpH0aJVD+ErgwybMA2vOHWl2S\npH+yUSY6vA+4EXgoyXeBE4CHgH+9EB2TJC09o0wJ35bkNODVwCoG08Jvr6ofL1TnJElLy6hTwn8M\n3LpAfZEkLXH7DaUk91TVy9ryAwwmO/yUqjphAfomSVpinulM6VeHlt++kB2RJGm/oVRVfwWQZBnw\nLmBDVT2xGB2TJC09s5oSXlW7gTcATmqQJC2YUX5P6WPAh5McOupB2i3Uv5rkniR3J3lfqx+VZFOS\ne9vzka2e9rVGU0m+0Wb9Tb/WOa39vUnOGaq/KsldbZ9LkmSux5AkjccoofSfgPOAx5M8kOR708+z\n2Pcp4LfbpIk1wHvavZjOB75cVScBX27rAG8ETmqPDcAnYBAwwAcZTEs/HfjgdMi0NhuG9lvb6iMd\nQ5I0PqNMCZ/zRIeqeojBL9pSVY8nuQdYCawDXtuaXQHcAry/1a+sqgK+lmR5kmNb201V9QhAkk3A\n2iS3AM+vqltb/UpgPXDzqMdofZUkjcEoZ0q3Aq8DPg3c1J5fD9w2ygGTrAZObfu9aDoE2vMLW7OV\nDH45d9q2VttffdsMdeZwDEnSmIxypvQJ4GTgN4DvAi8GLmDwD/m7ZvMCSZ4LfAH4zar6h/axz4xN\nZ6jVHOr77c5s9kmygcHlPU44wV/HkqSFNMqZ0nrgzVV1c1V9q6pubrX1s9m5TZD4AvC5qrqulb/f\nLsvRnh9u9W3A8UO7rwK2P0N91Qz1uRxjD1V1aVVNVNXEihUrZjNUSdIcjRJKfw88Z6/aEbTPivan\nzYS7DLinqv7H0KYbgOkZdOcAXxyqv6PNkFsDPNYuvW0E3pDkyDbB4Q3Axrbt8SRr2rHesddrjXIM\nSdKYjHL57rPA/07yh/zkLOM9wJVJzphuVFVfmWHf1wD/Drgryddb7T8DHwGuSXIu8D3gl9u2m4A3\nAVPAD4F3ttd+JMnvAXe0dr87PekBeDfwGQZBeXN7MOoxJEnjk8Hks1k0TL4zi2ZVVS/5p3WpXxMT\nEzU5uffNdyVJ+5Nkc1VNzKbtKLeuOHHuXZIk6Zl5K3NJUjcMJUlSNwwlSVI3DCVJUjcMJUlSNwwl\nSVI3DCVJUjcMJUlSNwwlSVI3DCVJUjcMJUlSNwwlSVI3DCVJUjcMJUlSNwwlSVI3DCVJUjcMJUlS\nNwwlSVI3DCVJUjcMJUlSNwwlSVI3DCVJUjcMJUlSNwwlSVI3DCVJUjcMJUlSNwwlSVI3DCVJUjcO\nGXcHJEn9un7Lg1y0cSvbd+7iuOVHcN6ZJ7P+1JULdjxDSZI0o+u3PMgF193Frid3A/Dgzl1ccN1d\nAAsWTF6+kyTN6KKNW58OpGm7ntzNRRu3LtgxDSVJ0oy279w1Un0+GEqSpBkdt/yIkerzwVCSJM1o\n9dEzh8++6vNhUUIpyeVJHk7yzaHaUUk2Jbm3PR/Z6klySZKpJN9IctrQPue09vcmOWeo/qokd7V9\nLkmSuR5DkjTwtfseHak+HxbrTOkzwNq9aucDX66qk4Avt3WANwIntccG4BMwCBjgg8CrgdOBD06H\nTGuzYWi/tXM5hiTpJ3ZXjVSfD4sSSlX1F8Aje5XXAVe05SuA9UP1K2vga8DyJMcCZwKbquqRqnoU\n2ASsbdueX1W3VlUBV+71WqMcQ5LULBtcdJp1fT6M8zOlF1XVQwDt+YWtvhJ4YKjdtlbbX33bDPW5\nHEOS1Lzt1cePVJ8PPU50mCmCaw71uRzjpxsmG5JMJpncsWPHM7ysJB08Llz/Ct6+5oSnz4yWJbx9\nzQlcuP4VC3bMcX6jw/eTHFtVD7VLZw+3+jZgOIZXAdtb/bV71W9p9VUztJ/LMX5KVV0KXAowMTGx\ncBdSJalDF65/xYKG0N7GeaZ0AzA9g+4c4ItD9Xe0GXJrgMfapbeNwBuSHNkmOLwB2Ni2PZ5kTZt1\n9469XmuUY0iSxmhRzpSSfJ7BWc4xSbYxmEX3EeCaJOcC3wN+uTW/CXgTMAX8EHgnQFU9kuT3gDta\nu9+tqunJE+9mMMPvCODm9mDUY0iSxiu1gFP7DjYTExM1OTk57m5I0gElyeaqmphN2x4nOkiSlihD\nSZLUDUNJktQNQ0mS1A1DSZLUDUNJktQNQ0mS1A1DSZLUDUNJktQNQ0mS1A1DSZLUDUNJktQNQ0mS\n1A1DSZLUDUNJktQNQ0mS1A1DSZLUDUNJktQNQ0mS1A1DSZLUDUNJktQNQ0mS1A1DSZLUDUNJktQN\nQ0mS1A1DSZLUDUNJktQNQ0mS1A1DSZLUDUNJktSNQ8bdAUlSv67f8iAXbdzK9p27OG75EZx35sms\nP3Xlgh3PUJIkzej6LQ9y3rV38uTuAuDBnbs479o7ARYsmLx8J0ma0Yf//O6nA2nak7uLD//53Qt2\nTENJkjSjR3/45Ej1+WAoSZK6saQ/U0qyFvgDYBnw6ar6yJi7JEmLbvX5Xxp3F562ZEMpyTLg48Av\nANuAO5LcUFXfms/j9PSXLUm9W8qX704Hpqrqvqr6EXAVsG4+D2AgSdJolnIorQQeGFrf1mqSpDFZ\nyqGUGWr1U42SDUkmk0zu2LFjEbolSUvXUg6lbcDxQ+urgO17N6qqS6tqoqomVqxYsWidk6Re3f+R\nsxbstZdyKN0BnJTkxCSHAWcDN4y5T5LUtYUMJFjCs++q6qkk7wU2MpgSfnlVzeuvKd//kbOc7CDp\ngLTQ4bMvSzaUAKrqJuCmhTzGuP5iJelAtJQv30mSOmMoSZK6YShJkrphKEmSumEoSZK6kaqf+hID\n7UOSHcB357j7McAP5rE7BwrHvXQsxTGD456NF1fVrL59wFBaJEkmq2pi3P1YbI576ViKYwbHPd+v\n6+U7SVI3DCVJUjcMpcVz6bg7MCaOe+lYimMGxz2v/ExJktQNz5QkSd0wlBZBkrVJtiaZSnL+uPsz\nqiSXJ3k4yTeHakcl2ZTk3vZ8ZKsnySVtrN9IctrQPue09vcmOWeo/qokd7V9Lkky0w0YF12S45N8\nNck9Se5O8r5WP2jHnuTZSW5Pcmcb84db/cQkt7X+X91u90KSw9v6VNu+eui1Lmj1rUnOHKp3+/OQ\nZFmSLUlubOsH/biT3N/eg19PMtlq43uPV5WPBXwwuC3Gt4GXAIcBdwKnjLtfI47hXwGnAd8cqv0+\ncH5bPh/4aFt+E3Azgzv7rgFua/WjgPva85Ft+ci27XbgX7R9bgbeOO4xt34dC5zWlp8H/B1wysE8\n9taP57blQ4Hb2liuAc5u9T8B3t2Wfx34k7Z8NnB1Wz6lvdcPB05sPwPLev95AH4L+FPgxrZ+0I8b\nuB84Zq/a2N7jniktvNOBqaq6r6p+BFwFrBtzn0ZSVX8BPLJXeR1wRVu+Alg/VL+yBr4GLE9yLHAm\nsKmqHqmqR4FNwNq27flVdWsN3sFXDr3WWFXVQ1X1N235ceAeYCUH8dhb3/+xrR7aHgWcAVzb6nuP\nefrP4lrgde1/wuuAq6rqiar6DjDF4Geh25+HJKuAs4BPt/WwBMa9D2N7jxtKC28l8MDQ+rZWO9C9\nqKoegsE/3sALW31f491ffdsM9a60yzOnMjhzOKjH3i5hfR14mME/Lt8GdlbVU63JcD+fHlvb/hhw\nNKP/WfTgYuB3gB+39aNZGuMu4P8k2ZxkQ6uN7T2+pG/yt0hmun56ME953Nd4R613I8lzgS8Av1lV\n/7CfS+IHxdirajfwyiTLgf8FvGymZu151LHN9B/hsY85yZuBh6tqc5LXTpdnaHpQjbt5TVVtT/JC\nYFOSv91P2wV/j3umtPC2AccPra8Cto+pL/Pp++3UnPb8cKvva7z7q6+aod6FJIcyCKTPVdV1rbwk\nxl5VO4FbGHx2sDzJ9H9ih/v59Nja9hcwuNQ76p/FuL0GeEuS+xlcWjuDwZnTwT5uqmp7e36YwX9C\nTmec7/Fxf8h2sD8YnI3ex+BDz+kPOF8+7n7NYRyr2XOiw0Xs+UHo77fls9jzg9DbW/0o4DsMPgQ9\nsi0f1bbd0dpOfxD6pnGPt/UrDK6BX7xX/aAdO7ACWN6WjwD+Engz8Gfs+YH/r7fl97DnB/7XtOWX\ns+cH/vcx+LC/+58H4LX8ZKLDQT1u4GeA5w0t/zWwdpzv8bG/AZbCg8GMlb9jcG3+A+Puzxz6/3ng\nIeBJBv/zOZfB9fMvA/e25+k3YICPt7HeBUwMvc67GHzwOwW8c6g+AXyz7fNHtF/qHvcD+JcMLjV8\nA/h6e7zpYB478LPAljbmbwL/tdVfwmAW1VT7h/rwVn92W59q218y9FofaOPaytCMq95/HtgzlA7q\ncbfx3dked0/3a5zvcb/RQZLUDT9TkiR1w1CSJHXDUJIkdcNQkiR1w1CSJHXDUJI60b6V+7Vz2O8z\nSS5cgC5Ji86vGZI6UVUvH3cfpHHzTEmS1A1DSepEu9na65N8KMk1Sa5M8ni7rDcx1O7UJH/Ttl3N\n4NsFhl/nze2GbTuT/HWSn231f5bkkekbsyU5LskP5nLJUFoohpLUp7cw+GLQ5cANDL6ehXbn0+uB\nzzL4vrE/A35peqcWOJcD/5HBV8V8ErghyeFV9W3g/cDnkjwH+J/AZ6rqlkUak/SMDCWpT39VVTfV\n4DYSnwV+rtXXMLjx3sVV9WRVXcvgCy+n/Srwyaq6rap2V9UVwBNtP6rqUwy+z+w2BnfW/cDiDEea\nHUNJ6tPfDy3/EHh2u0XCccCDteeXVn53aPnFwG+3S3c7k+xkcEuB44bafAr458AfVtUTC9N9aW4M\nJenA8hCwMnveafCEoeUHgP9WVcuHHs+pqs/D0zcsvBi4DPhQkqMWrefSLBhK0oHlVuAp4DeSHJLk\nFxnclG3ap4BfS/LqDPxMkrOSPK9t/wNgc1X9B+BLDO4RJHXDUJIOIFX1I+AXgX8PPAr8G+C6oe2T\nDD5X+qO2faq1Jck6Bjdw+7XW/LeA05L8yuL0Xnpm3k9JktQNz5QkSd0wlCRJ3TCUJEndMJQkSd0w\nlCRJ3TCUJEndMJQkSd0wlCRJ3TCUJEnd+P8d+08mlzT9xAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a322c4390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# price 价格的散点图\n",
    "plt.scatter(range(train.shape[0]), np.sort(train.price.values))\n",
    "plt.xlabel('index', fontsize=12)\n",
    "plt.ylabel('price', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### 从散布图上看，有3个点是离群点，我们把这几个点删除。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ulimit is : 13000.0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:3: DeprecationWarning: \n",
      ".ix is deprecated. Please use\n",
      ".loc for label based indexing or\n",
      ".iloc for positional indexing\n",
      "\n",
      "See the documentation here:\n",
      "http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n",
      "/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:179: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  self._setitem_with_indexer(indexer, value)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nGBNV/xdV+fIVPfJ8hgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1065269b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ulimit = np.percentile(train.price.values, 99)\n",
    "print('ulimit is :', ulimit)\n",
    "train['price'].ix[train['price']>ulimit] = ulimit\n",
    "\n",
    "sns.distplot(train.price.values, bins=50, kde=True)\n",
    "plt.xlabel('price', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 49352 entries, 10 to 99994\n",
      "Data columns (total 15 columns):\n",
      "bathrooms          49352 non-null float64\n",
      "bedrooms           49352 non-null int64\n",
      "building_id        49352 non-null object\n",
      "created            49352 non-null object\n",
      "description        49352 non-null object\n",
      "display_address    49352 non-null object\n",
      "features           49352 non-null object\n",
      "interest_level     49352 non-null object\n",
      "latitude           49352 non-null float64\n",
      "listing_id         49352 non-null int64\n",
      "longitude          49352 non-null float64\n",
      "manager_id         49352 non-null object\n",
      "photos             49352 non-null object\n",
      "price              49352 non-null float64\n",
      "street_address     49352 non-null object\n",
      "dtypes: float64(4), int64(2), object(9)\n",
      "memory usage: 7.3+ MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:4: DeprecationWarning: \n",
      ".ix is deprecated. Please use\n",
      ".loc for label based indexing or\n",
      ".iloc for positional indexing\n",
      "\n",
      "See the documentation here:\n",
      "http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated\n",
      "  after removing the cwd from sys.path.\n",
      "/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:179: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  self._setitem_with_indexer(indexer, value)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAENCAYAAAAG6bK5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFnNJREFUeJzt3X+w3XV95/Hny4Do+qNgiU5ISIPb\nuC12a7TXwI5tl4oLgW4LzqwWcDRrmYlucVd37So43cEfy2zbaWXXWUuLBQ2uiKzWMbWpmFJd664C\nCQ1IQJZboHAlQ2IDKDqLEt/7x/nc8SS5yf2R+yO5n+dj5sw93/f38z3n+/3m5LzO5/v9ns9JVSFJ\n6s8zFnoFJEkLwwCQpE4ZAJLUKQNAkjplAEhSpwwASeqUASBJnTIAJKlTkwZAkmcluTXJHUl2JHlf\nq38syQNJtrfbmlZPkg8lGU1yZ5JXDD3W+iT3tdv6udssSdJkjplCm6eAV1fVk0mOBb6a5C/bvP9Y\nVZ/er/05wOp2Ow24CjgtyQuAy4ERoIBtSTZV1WMHe+ITTzyxVq1aNa0NkqTebdu27dtVtXSydpMG\nQA3GiniyTR7bbocaP+I84Lq23NeTHJ9kGXAGsKWq9gAk2QKsAz55sAdatWoVW7dunWwVJUlDkvz9\nVNpN6RxAkiVJtgO7GLyJ39JmXdEO81yZ5LhWWw48PLT4WKsdrC5JWgBTCoCq2ltVa4AVwNokPwdc\nBvwM8ErgBcC7W/NM9BCHqO8jyYYkW5Ns3b1791RWT5I0A9O6CqiqHge+DKyrqp018BTwUWBtazYG\nnDy02ArgkUPU93+Oq6tqpKpGli6d9BCWJGmGpnIV0NIkx7f7zwZeA3yzHdcnSYDzgbvaIpuAN7Wr\ngU4HnqiqncBNwFlJTkhyAnBWq0mSFsBUrgJaBmxMsoRBYNxYVZ9P8tdJljI4tLMdeGtrvxk4FxgF\nvg+8GaCq9iT5AHBba/f+8RPCkqT5lyP5B2FGRkbKq4AkaXqSbKuqkcna+U1gSeqUASBJnTIAJKlT\nUzkJLGkWXH/LQxPWLzpt5TyviTRgD0CSOmUASFKnDABJ6pQBIEmdMgAkqVMGgCR1ygCQpE4ZAJLU\nKQNAkjplAEhSpwwASeqUASBJnTIAJKlTBoAkdcoAkKROGQCS1CkDQJI6ZQBIUqcmDYAkz0pya5I7\nkuxI8r5WPyXJLUnuS/KpJM9s9ePa9Gibv2rosS5r9XuTnD1XGyVJmtxUegBPAa+uqpcBa4B1SU4H\nfg+4sqpWA48BF7f2FwOPVdVPA1e2diQ5FbgAeCmwDvijJEtmc2MkSVM3aQDUwJNt8th2K+DVwKdb\nfSNwfrt/XpumzT8zSVr9hqp6qqoeAEaBtbOyFZKkaZvSOYAkS5JsB3YBW4C/Ax6vqqdbkzFgebu/\nHHgYoM1/AvjJ4foEy0iS5tmUAqCq9lbVGmAFg0/tPztRs/Y3B5l3sPo+kmxIsjXJ1t27d09l9SRJ\nMzCtq4Cq6nHgy8DpwPFJjmmzVgCPtPtjwMkAbf5PAHuG6xMsM/wcV1fVSFWNLF26dDqrJ0mahmMm\na5BkKfDDqno8ybOB1zA4sfsl4F8BNwDrgc+1RTa16a+1+X9dVZVkE3B9kg8CJwGrgVtneXukGbv+\nlocmrF902sp5XhNpfkwaAMAyYGO7YucZwI1V9fkkdwM3JPnPwN8C17T21wAfTzLK4JP/BQBVtSPJ\njcDdwNPAJVW1d3Y3R5I0VZMGQFXdCbx8gvr9THAVT1X9P+B1B3msK4Arpr+akqTZ5jeBJalTBoAk\ndcoAkKROGQCS1CkDQJI6ZQBIUqcMAEnqlAEgSZ0yACSpUwaAJHXKAJCkThkAktQpA0CSOmUASFKn\nDABJ6pQBIEmdMgAkqVMGgCR1ygCQpE4ZAJLUKQNAkjplAEhSpyYNgCQnJ/lSknuS7Ejy9lZ/b5Jv\nJdnebucOLXNZktEk9yY5e6i+rtVGk1w6N5skSZqKY6bQ5mngnVV1e5LnAduSbGnzrqyqPxhunORU\n4ALgpcBJwF8leUmb/WHgXwBjwG1JNlXV3bOxIZKk6Zk0AKpqJ7Cz3f9uknuA5YdY5Dzghqp6Cngg\nySiwts0brar7AZLc0NoaAJK0AKZ1DiDJKuDlwC2t9LYkdya5NskJrbYceHhosbFWO1h9/+fYkGRr\nkq27d++ezupJkqZhKoeAAEjyXOAzwDuq6jtJrgI+AFT7+4fAbwKZYPFi4rCpAwpVVwNXA4yMjBww\nXxp2/S0PHXTeRaetnMc1mX0H27ajfbt05JhSACQ5lsGb/yeq6s8AqurRofkfAT7fJseAk4cWXwE8\n0u4frC5pigwGzZapXAUU4Brgnqr64FB92VCz1wJ3tfubgAuSHJfkFGA1cCtwG7A6ySlJnsngRPGm\n2dkMSdJ0TaUH8CrgjcA3kmxvtfcAFyZZw+AwzoPAWwCqakeSGxmc3H0auKSq9gIkeRtwE7AEuLaq\ndszitkiSpmEqVwF9lYmP628+xDJXAFdMUN98qOUkSfPHbwJLUqcMAEnqlAEgSZ2a8vcAJM2NQ32X\nQZpL9gAkqVMGgCR1ygCQpE55DkBaJBwiQtNlD0CSOmUASFKnPASkWeHhB+noYw9AkjplAEhSpwwA\nSeqU5wDUndkaesHzHjra2QOQpE4ZAJLUKQ8BSZNwtE4tVvYAJKlTBoAkdcoAkKROTRoASU5O8qUk\n9yTZkeTtrf6CJFuS3Nf+ntDqSfKhJKNJ7kzyiqHHWt/a35dk/dxtliRpMlPpATwNvLOqfhY4Hbgk\nyanApcDNVbUauLlNA5wDrG63DcBVMAgM4HLgNGAtcPl4aEiS5t+kAVBVO6vq9nb/u8A9wHLgPGBj\na7YROL/dPw+4rga+DhyfZBlwNrClqvZU1WPAFmDdrG6NJGnKpnUZaJJVwMuBW4AXVdVOGIREkhe2\nZsuBh4cWG2u1g9WlRcXLRnW0mPJJ4CTPBT4DvKOqvnOophPU6hD1/Z9nQ5KtSbbu3r17qqsnSZqm\nKQVAkmMZvPl/oqr+rJUfbYd2aH93tfoYcPLQ4iuARw5R30dVXV1VI1U1snTp0ulsiyRpGqZyFVCA\na4B7quqDQ7M2AeNX8qwHPjdUf1O7Guh04Il2qOgm4KwkJ7STv2e1miRpAUzlHMCrgDcC30iyvdXe\nA/wucGOSi4GHgNe1eZuBc4FR4PvAmwGqak+SDwC3tXbvr6o9s7IVkqRpmzQAquqrTHz8HuDMCdoX\ncMlBHuta4NrprKAkaW74TWBJ6pQBIEmdMgAkqVMGgCR1ygCQpE4ZAJLUKX8SUkcFx9eRZp89AEnq\nlD0ALVr2GqRDswcgSZ0yACSpUwaAJHXKAJCkThkAktQpA0CSOmUASFKnDABJ6pRfBNO0+OUqafGw\nByBJnTIAJKlTBoAkdcoAkKROTRoASa5NsivJXUO19yb5VpLt7Xbu0LzLkowmuTfJ2UP1da02muTS\n2d8USdJ0TKUH8DFg3QT1K6tqTbttBkhyKnAB8NK2zB8lWZJkCfBh4BzgVODC1laStEAmvQy0qr6S\nZNUUH+884Iaqegp4IMkosLbNG62q+wGS3NDa3j3tNZYkzYrDOQfwtiR3tkNEJ7TacuDhoTZjrXaw\nuiRpgcz0i2BXAR8Aqv39Q+A3gUzQtpg4aGqiB06yAdgAsHLlyhmuno5WftFMmj8z6gFU1aNVtbeq\nfgR8hB8f5hkDTh5qugJ45BD1iR776qoaqaqRpUuXzmT1JElTMKMASLJsaPK1wPgVQpuAC5Icl+QU\nYDVwK3AbsDrJKUmeyeBE8aaZr7Yk6XBNeggoySeBM4ATk4wBlwNnJFnD4DDOg8BbAKpqR5IbGZzc\nfRq4pKr2tsd5G3ATsAS4tqp2zPrWSJKmbCpXAV04QfmaQ7S/ArhigvpmYPO01k6SNGccDVRa5A51\nYv2i07zQomcOBSFJnTIAJKlTBoAkdcoAkKROGQCS1CkDQJI6ZQBIUqcMAEnqlAEgSZ0yACSpUw4F\noQXhuP/SwrMHIEmdMgAkqVMGgCR1ygCQpE4ZAJLUKQNAkjplAEhSpwwASeqUASBJnTIAJKlTkwZA\nkmuT7Epy11DtBUm2JLmv/T2h1ZPkQ0lGk9yZ5BVDy6xv7e9Lsn5uNkeSNFVT6QF8DFi3X+1S4Oaq\nWg3c3KYBzgFWt9sG4CoYBAZwOXAasBa4fDw0JEkLY9IAqKqvAHv2K58HbGz3NwLnD9Wvq4GvA8cn\nWQacDWypqj1V9RiwhQNDRZI0j2Z6DuBFVbUToP19YasvBx4eajfWagerHyDJhiRbk2zdvXv3DFdP\nkjSZ2T4JnAlqdYj6gcWqq6tqpKpGli5dOqsrJ0n6sZn+HsCjSZZV1c52iGdXq48BJw+1WwE80upn\n7Ff/8gyfW9ICOdjvOFx02sp5XhPNhpn2ADYB41fyrAc+N1R/U7sa6HTgiXaI6CbgrCQntJO/Z7Wa\nJGmBTNoDSPJJBp/eT0wyxuBqnt8FbkxyMfAQ8LrWfDNwLjAKfB94M0BV7UnyAeC21u79VbX/iWVJ\n0jyaNACq6sKDzDpzgrYFXHKQx7kWuHZaaydJmjN+E1iSOuWPwksdm62Tup4cPjrZA5CkThkAktQp\nA0CSOmUASFKnDABJ6pQBIEmdMgAkqVN+D0DSAQ52Xb8WF3sAktQpA0CSOmUASFKnDABJ6pQBIEmd\nMgAkqVMGgCR1ygCQpE4ZAJLUKQNAkjplAEhSpw5rLKAkDwLfBfYCT1fVSJIXAJ8CVgEPAq+vqseS\nBPhvwLnA94F/XVW3H87zT8bfKV14jikjHdpCvk/NRg/gV6pqTVWNtOlLgZurajVwc5sGOAdY3W4b\ngKtm4bklSTM0F4eAzgM2tvsbgfOH6tfVwNeB45Msm4PnlyRNweEGQAFfTLItyYZWe1FV7QRof1/Y\n6suBh4eWHWs1SdICONzfA3hVVT2S5IXAliTfPETbTFCrAxoNgmQDwMqVHquXpLlyWAFQVY+0v7uS\nfBZYCzyaZFlV7WyHeHa15mPAyUOLrwAemeAxrwauBhgZGTkgIDQznhCXtL8ZHwJK8pwkzxu/D5wF\n3AVsAta3ZuuBz7X7m4A3ZeB04InxQ0WSpPl3OD2AFwGfHVzdyTHA9VX1hSS3ATcmuRh4CHhda7+Z\nwSWgowwuA33zYTy3JOkwzTgAqup+4GUT1P8BOHOCegGXzPT5JEmzyx+FX2Sm+8Urzw1I/TIAJB21\n/ABzeAwASUc8hxSZGw4GJ0mdMgAkqVMGgCR1ynMARyGPh0qaDfYAJKlT9gCOYH7SlzSX7AFIUqfs\nAWhC9j6kxc8AOAL4ZitpIRgAko4Ys/VhaCZDRPQ4rIQBIEkzsBgCw5PAktQpewCSdAiL+RydATCP\nFvMLSdLRxwCYA77RSwOL4Tj5YmYASOqGH8721WUAzNanEl9MkvZ3NPV6ugwASZpvR+IHRgNgyJH4\nDyQtRv5fOzLM+/cAkqxLcm+S0SSXzvfzS5IG5jUAkiwBPgycA5wKXJjk1PlcB0nSwHz3ANYCo1V1\nf1X9ALgBOG+e10GSxPwHwHLg4aHpsVaTJM2z+T4JnAlqtU+DZAOwoU0+meTeOV+rfZ0IfHuen/NI\n5z7Zl/vjQO6TfR32/njD4T3/T02l0XwHwBhw8tD0CuCR4QZVdTVw9Xyu1LAkW6tqZKGe/0jkPtmX\n++NA7pN9HS37Y74PAd0GrE5ySpJnAhcAm+Z5HSRJzHMPoKqeTvI24CZgCXBtVe2Yz3WQJA3M+xfB\nqmozsHm+n3caFuzw0xHMfbIv98eB3Cf7Oir2R6pq8laSpEXHXwSTpE4t+gBIsiTJ3yb5fJs+Jckt\nSe5L8ql2Mnqi5X4+ydeS7EjyjSTPavUvt6EstrfbC+dze2bDTPZJkjcMbfP2JD9KsqbN+4W2j0aT\nfCjJRJf7HrHmYH/0+ho5NsnG9lq4J8llQ/OO+iFg5mCfPNjq25Nsnc9tGbfoAwB4O3DP0PTvAVdW\n1WrgMeDi/RdIcgzwP4C3VtVLgTOAHw41eUNVrWm3XXO25nNn2vukqj4xvs3AG4EHq2p7m30Vg+9u\nrG63dXO58nNgtvcHdPgaAV4HHFdV/xT4BeAtSVYtoiFgZm2fDM3/lfYaWZBLRhd1ACRZAfwq8Kdt\nOsCrgU+3JhuB8ydY9Czgzqq6A6Cq/qGq9s79Gs+9w9gnwy4EPtmWXwY8v6q+VoMTStdNYfkjxmzv\nj8XgMPZJAc9pH6CeDfwA+A6LYAiYOdgnR4RFHQDAfwXeBfyoTf8k8HhVPd2mDzYUxUuASnJTktuT\nvGu/+R9t3bb/dLQd7mDm+2TYb/DjN7zlbZlxR9vwHrO9P8b1+Br5NPA9YCfwEPAHVbWHxTEEzGzv\nExiEwxeTbMtgBIR5t2gDIMm/BHZV1bbh8gRNJ7oM6hjgFxl8G/sXgdcmObPNe0Przv1Su71x9tZ6\nbh3mPhl/jNOA71fVXTNZ/kgyR/sD+n2NrAX2AicBpwDvTPLiaSx/RJqjfQLwqqp6BYNDY5ck+eVZ\nXO0pWcw/CPMq4NeTnAs8C3g+gxQ/PskxLbkPGIqiGQP+V1V9GyDJZuAVwM1V9S2AqvpukusZ/ANf\nN+dbMzsOZ5+Mu4B9P+2OtWXGTbb8kWQu9gcdv0YuAr5QVT8EdiX538AIg0//hxwC5gg3F/vk/qp6\nBKCqdiX5LIPXyVfmfnOGVNWivzE4ifv5dv9/Ahe0+38M/NYE7U8Abgf+EYOQ/CsGx/+OAU5sbY5l\n0L1760Jv33zskzbvGQze8F+8X/024HQGn4r+Ejh3obdvofZHz68R4N3AR9vr4DnA3cDPt31yP4NP\nwM8E7gBeutDbt8D75DnA81qb5wD/B1g339uzaA8BHcK7gf+QZJTBcbxrAJL8epL3A1TVY8AHGbyx\nbQdur6q/AI4DbkpyZ6t/C/jI/G/CrJt0nzS/DIxV1f37Lf9vGJwcGwX+jkEIHM0OZ3/0/Br5MPBc\n4C4G/3c+WlV31uAT8vgQMPcAN9biGAJmxvsEeBHw1SR3ALcCf1FVX5jvDfCbwJLUqR57AJIkDABJ\n6pYBIEmdMgAkqVMGgCR1ygDQotdGXXzNDJb7pST3zuJ6nJFkbPKW0vwwAKQmSSX56fHpqvqbqvon\nQ/NnFCTSkcoAkKROGQDqRpK1GfzIz+NJdib57+M/4pFkfAyWO5I8meQ3hg/ZJPk4sBL48zb/XRMd\n0hnuJSR5dpKPJXksyd3AK/dre1KSzyTZneSBJP9urveBNMwAUE/2Av8eOBH4Z8CZwG8BVNX4SIwv\nq6rnVtWnhhesqjcyGM7319r835/C810O/ON2OxtYPz4jyTOAP2cwLs7yti7vSHL2zDdPmh4DQN2o\nqm1V9fWqerqqHgT+BPjnc/iUrweuqKo9VfUw8KGhea8EllbV+6vqB208oY8wGF1UmheLeThoaR9J\nXsJgkL8RfjzS67ZDLnR4TmLfH0L5+6H7PwWclOTxodoS4G/mcH2kfdgDUE+uAr4JrK6q5wPvYeIf\n9jiY/UdO/B6DIAEGPxoOLB2av5N9x8FfOXT/YeCBqjp+6Pa8qjp3GusjHRYDQD15HoPfY30yyc8w\nGMZ62KPAiw9Y6uDz/y/wrCS/muRY4HcYDAc97kbgsiQntN+U/bdD824FvpPk3e1k8ZIkP5dknxPF\n0lwyANST32bwC03fZXC8/VP7zX8vsLFdJfT6CZb/L8DvtPm/XVVPMDiJ/KcMxv3/Hvv+PvL7GBz2\neQD4IvDx8RlVtRf4NWBNm//t9jg/cZjbKE2ZvwcgSZ2yByBJnTIAJKlTBoAkdcoAkKROGQCS1CkD\nQJI6ZQBIUqcMAEnqlAEgSZ36/25oAI/dllkqAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x105fead68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 纬度\n",
    "llimit = np.percentile(train.latitude.values, 1)\n",
    "ulimit = np.percentile(train.latitude.values, 99)\n",
    "train['latitude'].ix[train['latitude']<llimit] = llimit\n",
    "train['latitude'].ix[train['latitude']>ulimit] = ulimit\n",
    "\n",
    "sns.distplot(train.latitude.values, bins=50, kde=False)\n",
    "plt.xlabel('latitude', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:13: DeprecationWarning: \n",
      ".ix is deprecated. Please use\n",
      ".loc for label based indexing or\n",
      ".iloc for positional indexing\n",
      "\n",
      "See the documentation here:\n",
      "http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated\n",
      "  del sys.path[0]\n",
      "/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:179: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  self._setitem_with_indexer(indexer, value)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10c3299e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 经度\n",
    "# llimit = np.percentile(train.longitude.values, 1)\n",
    "# ulimit = np.percentile(train.longitude.values, 99)\n",
    "# train['longitude'].ix[train['longitude']<llimit] = llimit\n",
    "# train['longitude'].ix[train['longitude']>ulimit] = ulimit\n",
    "\n",
    "# sns.distplot(train.longitude.values, bins=50, kde=False)\n",
    "# plt.xlabel('longitude', fontsize=12)\n",
    "# plt.show()\n",
    "\n",
    "llimit = np.percentile(train.longitude.values, 1)\n",
    "ulimit = np.percentile(train.longitude.values, 99)\n",
    "train['longitude'].ix[train['longitude']<llimit] = llimit\n",
    "train['longitude'].ix[train['longitude']>ulimit] = ulimit\n",
    "\n",
    "plt.figure(figsize=(8,6))\n",
    "sns.distplot(train.longitude.values, bins=50, kde=False)\n",
    "plt.xlabel('longitude', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAs8AAAEsCAYAAAA8Sl4GAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAHQ9JREFUeJzt3X2wZHV95/H3R1BLF+RxNDgDjg9E\n41MUZ9Fa3YRISsGo4yYQdXd1RHR0S/Apm4CuWTcxWpDsqmipVbOCYkohSDRiJBpEjcWuoAMKioiO\nT8wIwigDammCo9/9o8+Y3pk7M2duP/zu7X6/qm7d7t853fc7Hw73fvvXv3M6VYUkSZKkvbtb6wIk\nSZKk5cLmWZIkSerJ5lmSJEnqyeZZkiRJ6snmWZIkSerJ5lmSJEnqyeZZkiRJ6snmWZIkSerJ5lmS\nJEnqaf/WBezJ4YcfXqtXr25dhiRJkmbc1Vdf/YOqWrG3/ZZ087x69Wo2btzYugxJkiTNuCTf7bOf\nyzYkSZKknmyeJUmSpJ5sniVJkqSe9to8JzkvyW1JvjI09ldJvpbkuiQfTnLw0LbXJNmU5MYkTx0a\nP6Eb25TkzPH/UyRJkqTJ6jPz/F7ghJ3GLgMeWVWPBr4OvAYgycOB5wCP6B7zziT7JdkPeAdwIvBw\n4LndvpIkSdKysdfmuao+C9y+09g/VtX27u6VwKru9lrgwqr6l6r6NrAJOLb72lRV36qqu4ALu30l\nSZKkZWMca55fCPxDd3slsHlo25ZubHfju0iyPsnGJBu3bt06hvIkSZKk8RipeU7y34DtwPt3DC2w\nW+1hfNfBqg1Vtaaq1qxYsdfrVEuSJElTs+gPSUmyDng6cHxV7WiEtwBHDu22Cri5u727cUmSJGlZ\nWFTznOQE4Azgt6vqp0ObLgE+kOTNwP2Bo4HPM5h5PjrJA4HvMTip8D+OUrgkSdI8eMbbr9hl7KOn\nP6lBJYIezXOSC4DjgMOTbAFez+DqGvcELksCcGVVvbSqrk9yEfBVBss5XlZVv+ie5zTgE8B+wHlV\ndf0E/j2SJEnSxOy1ea6q5y4wfO4e9n8j8MYFxi8FLt2n6iRJkqQlxE8YlCRJknqyeZYkSZJ6snmW\nJEmSerJ5liRJknqyeZYkSZJ6snmWJEmSerJ5liRJknqyeZYkSZJ6snmWJEmSerJ5liRJknqyeZYk\nSZJ6snmWJEmSerJ5liRJknqyeZYkSZJ6snmWJEmSerJ5liRJknqyeZYkSZJ6snmWJEmSerJ5liRJ\nknqyeZYkSZJ62r91AZIkSUvRM95+xS5jHz39SQ0q0VLizLMkSZLUk82zJEmS1JPNsyRJktSTzbMk\nSZLUk82zJEmS1NNem+ck5yW5LclXhsYOTXJZkm903w/pxpPkbUk2JbkuyTFDj1nX7f+NJOsm88+R\nJEmSJqfPzPN7gRN2GjsTuLyqjgYu7+4DnAgc3X2tB94Fg2YbeD3weOBY4PU7Gm5JkiRpudhr81xV\nnwVu32l4LXB+d/t84FlD4++rgSuBg5McATwVuKyqbq+qbcBl7NqQS5IkSUvaYtc836+qbgHovt+3\nG18JbB7ab0s3trvxXSRZn2Rjko1bt25dZHmSJEnS+I37hMEsMFZ7GN91sGpDVa2pqjUrVqwYa3GS\nJEnSKBbbPN/aLceg+35bN74FOHJov1XAzXsYlyRJkpaNxTbPlwA7rpixDvjI0Pjzu6tuPAG4s1vW\n8QngKUkO6U4UfEo3JkmSJC0b++9thyQXAMcBhyfZwuCqGWcBFyU5FbgJOLnb/VLgacAm4KfAKQBV\ndXuSNwBf6Pb786ra+SRESZIkaUnba/NcVc/dzabjF9i3gJft5nnOA87bp+okSZKkJcRPGJQkSZJ6\n2uvMsyRJ0lLxjLdfscvYR09/UoNKNK+ceZYkSZJ6snmWJEmSerJ5liRJknqyeZYkSZJ68oTBJc4T\nIyRJkpYOZ54lSZKknmyeJUmSpJ5sniVJkqSebJ4lSZKknmyeJUmSpJ5sniVJkqSebJ4lSZKknrzO\nsyRJjS10TX/wuv7SUuTMsyRJktSTzbMkSZLUk82zJEmS1JPNsyRJktSTzbMkSZLUk82zJEmS1JOX\nqpMkAV4uTZL6cOZZkiRJ6snmWZIkSerJ5lmSJEnqaaQ1z0leBbwIKODLwCnAEcCFwKHANcDzququ\nJPcE3gc8Dvgh8Oyq+s4oP1/SfHFNriSptUXPPCdZCbwcWFNVjwT2A54DnA28paqOBrYBp3YPORXY\nVlUPAd7S7SdJkiQtG6Mu29gfuFeS/YF7A7cATwYu7rafDzyru722u0+3/fgkGfHnS5IkSVOz6Oa5\nqr4H/E/gJgZN853A1cAdVbW9220LsLK7vRLY3D12e7f/YYv9+ZIkSdK0jbJs4xAGs8kPBO4P/Bvg\nxAV2rR0P2cO24eddn2Rjko1bt25dbHmSJEnS2I2ybON3gW9X1daq+jnwIeDfAQd3yzgAVgE3d7e3\nAEcCdNsPAm7f+UmrakNVramqNStWrBihPEmSJGm8Rrnaxk3AE5LcG/gZcDywEfg0cBKDK26sAz7S\n7X9Jd/9z3fZPVdUuM8+SJEmafcv1CkqjrHm+isGJf9cwuEzd3YANwBnAq5NsYrCm+dzuIecCh3Xj\nrwbOHKFuSZIkaepGus5zVb0eeP1Ow98Cjl1g338GTh7l50mSJEktjdQ8S5KkyVqub21Ls8rmWVIT\nCzUENgOSpKVu1A9JkSRJkuaGM8/SDPJtXkmSJsPmWUuOb+dLkqSlymUbkiRJUk/OPGtiXDogSZJm\njTPPkiRJUk/OPGuuub5a0nLm7zAthu8Mj8aZZ0mSJKknm2dJkiSpJ5dtSNKc8a1+SVo8m2dpN2ww\nJEnSzmyeNRJPOpAkOdmgeWLzLEljtKcmwgZDkpY/m2dJ0rLhu13S/88X5dNn8yxJS5jNouaRx72W\nMi9VJ0mSJPXkzLMkLQG+9SpJy4PNs7SPfDtRkqT5ZfO8CM4QSZo3vmiUpAGbZ0nSSJxQkDRPPGFQ\nkiRJ6smZZzXhTJUkSVqObJ6lMXJdqCRJs83mWZI0Mb7LpKXCY7GNWZxUGql5TnIw8G7gkUABLwRu\nBP4GWA18B/jDqtqWJMA5wNOAnwIvqKprRvn5kiT1YeMkaVxGnXk+B/h4VZ2U5B7AvYHXApdX1VlJ\nzgTOBM4ATgSO7r4eD7yr+65F8o+BJGmp82+VZs2im+ck9wF+C3gBQFXdBdyVZC1wXLfb+cBnGDTP\na4H3VVUBVyY5OMkRVXXLoquXNFbL+Y/cNN8anMW3ISVJ/Ywy8/wgYCvwniS/CVwNvAK4346GuKpu\nSXLfbv+VwOahx2/pxmyeJUkas+X8YlhaykZpnvcHjgFOr6qrkpzDYInG7mSBsdplp2Q9sB7gqKOO\nGqG85cNfcJKkeeM7OFquRmmetwBbquqq7v7FDJrnW3csx0hyBHDb0P5HDj1+FXDzzk9aVRuADQBr\n1qzZpbnW3vkLSXviizVJkhZv0c1zVX0/yeYkD62qG4Hjga92X+uAs7rvH+kecglwWpILGZwoeKfr\nnSVJ4+ILw8kyX2lg1KttnA68v7vSxreAUxh85PdFSU4FbgJO7va9lMFl6jYxuFTdKSP+bEmSJGmq\nRmqeq+pLwJoFNh2/wL4FvGyUnyfpX7k8R5Kk6btb6wIkSZKk5cLmWZIkSepp1DXPWmZ8q1+SJGnx\nbJ4lzTyvEiBpd5xU0r6yeZYkSRLgZEMfNs+Slhx/eUuSlipPGJQkSZJ6cuZZy4ozkpIkqSVnniVJ\nkqSebJ4lSZKknmyeJUmSpJ5c8yxJmlte41fSvrJ5lrRXNhiSJA3YPEuSJO0jr/40v1zzLEmSJPVk\n8yxJkiT1ZPMsSZIk9WTzLEmSJPVk8yxJkiT1ZPMsSZIk9WTzLEmSJPXkdZ6lJcDrhUqStDw48yxJ\nkiT1ZPMsSZIk9eSyDUmSpBnkksDJcOZZkiRJ6mnkmeck+wEbge9V1dOTPBC4EDgUuAZ4XlXdleSe\nwPuAxwE/BJ5dVd8Z9edLkjQJC83agTN30rwbx8zzK4Abhu6fDbylqo4GtgGnduOnAtuq6iHAW7r9\nJEmSpGVjpOY5ySrg94B3d/cDPBm4uNvlfOBZ3e213X267cd3+0uSJEnLwqjLNt4K/AlwYHf/MOCO\nqtre3d8CrOxurwQ2A1TV9iR3dvv/YMQapD2+vepbr5Kkpc6/VcvHopvnJE8Hbquqq5Mct2N4gV2r\nx7bh510PrAc46qijFlueJM08/9hK0vSNsmzjicAzk3yHwQmCT2YwE31wkh1N+Srg5u72FuBIgG77\nQcDtOz9pVW2oqjVVtWbFihUjlCdJkiSN16JnnqvqNcBrALqZ5/9aVf8pyQeBkxg01OuAj3QPuaS7\n/7lu+6eqapeZZ7Xj9SAlSZL2bBIfknIGcGGSvwC+CJzbjZ8L/HWSTQxmnJ8zgZ8tSZL2wskSafHG\n0jxX1WeAz3S3vwUcu8A+/wycPI6fJ0mSJLXgJwxKkiRJPdk8S5IkST1NYs2zJC0brv2UJO0LZ54l\nSZKknpx5lqZkHmc45/HfrP48PiQtRzbPU+IngUmSJC1/Ns+StABf8EqSFmLzLEmSZoJLgTQNNs/q\nxV9I7Zi9JGmpm6e/VV5tQ5IkSerJmecxco2kJEnSbHPmWZIkSerJmWdJmkHztP5Q4+M7qNLeOfMs\nSZIk9WTzLEmSJPVk8yxJkiT1ZPMsSZIk9eQJg5KkJcWT1iQtZTbPkiRJ2iuv4jPgsg1JkiSpJ5tn\nSZIkqSebZ0mSJKknm2dJkiSpJ08YlCRpH3nilDS/bJ4lSZLGyBdXs81lG5IkSVJPi26ekxyZ5NNJ\n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\nH6TsNgZVRpb5AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a322d2a20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# created 日期\n",
    "train[\"created\"] = pd.to_datetime(train[\"created\"])\n",
    "train[\"date_created\"] = train[\"created\"].dt.date\n",
    "cnt_srs = train['date_created'].value_counts()\n",
    "\n",
    "plt.figure(figsize=(12,4))\n",
    "ax = plt.subplot(111)\n",
    "ax.bar(cnt_srs.index, cnt_srs.values, alpha=0.8)\n",
    "ax.xaxis_date()\n",
    "plt.xticks(rotation='vertical')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAD/CAYAAAAaGBpmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFKxJREFUeJzt3XuwnHV9x/H3l0QURCBAQE3QUI1S\n1KKQBrxUqbEQ1Bo6hRm0I5GhZKalYK0dhV4mLUqLHUeRaWEaJBqsGhGpZCwXI5daq0ASwHAJNiko\nOQXh2EDUWq3Bb/94fkfX89vds9lNsuck79fMM/vs7/l9n/2dvX32ueyeyEwkSWq117AHIEmafAwH\nSVLFcJAkVQwHSVLFcJAkVQwHSVLFcJAkVQwHSVLFcJAkVQwHSVJl+rAH0K9DDjkk58yZM+xhSNKU\nsW7duu9l5sxe+k7ZcJgzZw5r164d9jAkacqIiO/02tfdSpKkiuEgSaoYDpKkiuEgSaoYDpKkiuEg\nSaoYDpKkiuEgSapM2S/BDcO6s5f03PfYK5btxJFI0s7lloMkqWI4SJIqhoMkqWI4SJIqhoMkqWI4\nSJIqhoMkqTJhOETE8oh4IiLua2k7KCJWR8TGcjmjtEdEXBoRmyJifUQc01KzuPTfGBGLW9qPjYh7\nS82lERE7+o+UJG2fXrYcPgksHNd2PnBzZs4Fbi7XAU4G5pZpCXA5NGECLAWOA+YDS8cCpfRZ0lI3\n/rYkSbvYhOGQmV8FtoxrXgSsKPMrgFNa2q/Kxu3AgRHxPOAkYHVmbsnMJ4HVwMKybP/M/EZmJnBV\ny7okSUPS7zGHwzLzMYByeWhpnwVsbuk3Utq6tY+0aZckDdGOPiDd7nhB9tHefuURSyJibUSsHR0d\n7XOIkqSJ9BsOj5ddQpTLJ0r7CHB4S7/ZwKMTtM9u095WZi7LzHmZOW/mzJl9Dl2SNJF+w2EVMHbG\n0WLgupb2M8pZS8cDW8tup5uAEyNiRjkQfSJwU1n2g4g4vpyldEbLuiRJQzLhT3ZHxGeBE4BDImKE\n5qyji4GrI+Is4BHgtNL9euDNwCbgR8CZAJm5JSI+AKwp/S7MzLGD3H9Ac0bUPsANZZIkDdGE4ZCZ\nb++waEGbvgmc02E9y4HlbdrXAi+faBySpF3Hb0hLkiqGgySpYjhIkiqGgySpYjhIkiqGgySpYjhI\nkiqGgySpYjhIkiqGgySpYjhIkiqGgySpYjhIkiqGgySpYjhIkiqGgySpYjhIkiqGgySpYjhIkiqG\ngySpYjhIkiqGgySpYjhIkiqGgySpYjhIkiqGgySpYjhIkirThz2APcG6s5f03PfYK5btxJFIUm/c\ncpAkVQwHSVJloHCIiPdExP0RcV9EfDYinhURR0TEHRGxMSI+FxF7l77PLNc3leVzWtZzQWn/VkSc\nNNifJEkaVN/hEBGzgPOAeZn5cmAacDrwIeCjmTkXeBI4q5ScBTyZmS8GPlr6ERFHlbqXAQuByyJi\nWr/jkiQNbtDdStOBfSJiOrAv8BjwRuCasnwFcEqZX1SuU5YviIgo7Ssz8yeZ+TCwCZg/4LgkSQPo\nOxwy87+ADwOP0ITCVmAd8FRmbivdRoBZZX4WsLnUbiv9D25tb1MjSRqCQXYrzaD51H8E8Hzg2cDJ\nbbrmWEmHZZ3a293mkohYGxFrR0dHt3/QkqSeDPI9hzcBD2fmKEBEXAu8BjgwIqaXrYPZwKOl/whw\nODBSdkMdAGxpaR/TWvNLMnMZsAxg3rx5bQNEfq9C0uAGOebwCHB8ROxbjh0sAB4AbgVOLX0WA9eV\n+VXlOmX5LZmZpf30cjbTEcBc4M4BxiVJGlDfWw6ZeUdEXAPcBWwD7qb5VP8vwMqI+GBpu7KUXAl8\nKiI20WwxnF7Wc39EXE0TLNuAczLz6X7HJUka3EA/n5GZS4Gl45ofos3ZRpn5Y+C0Duu5CLhokLFI\nknYcvyEtSaoYDpKkiuEgSaoYDpKkiuEgSaoYDpKkiuEgSaoYDpKkiuEgSaoYDpKkiuEgSaoYDpKk\niuEgSaoYDpKkiuEgSaoYDpKkiuEgSaoYDpKkiuEgSaoYDpKkiuEgSaoYDpKkiuEgSaoYDpKkiuEg\nSaoYDpKkiuEgSaoYDpKkiuEgSaoYDpKkykDhEBEHRsQ1EfFgRGyIiFdHxEERsToiNpbLGaVvRMSl\nEbEpItZHxDEt61lc+m+MiMWD/lGSpMEMuuXwMeDGzDwSOBrYAJwP3JyZc4Gby3WAk4G5ZVoCXA4Q\nEQcBS4HjgPnA0rFAkSQNR9/hEBH7A68HrgTIzP/LzKeARcCK0m0FcEqZXwRclY3bgQMj4nnAScDq\nzNySmU8Cq4GF/Y5LkjS4QbYcfgUYBT4REXdHxMcj4tnAYZn5GEC5PLT0nwVsbqkfKW2d2iVJQzJI\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a322de5c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 创建时间的 hour纬度\n",
    "train[\"hour_created\"] = train[\"created\"].dt.hour\n",
    "cnt_srs = train[\"hour_created\"].value_counts()\n",
    "\n",
    "sns.barplot(cnt_srs.index, cnt_srs.values, alpha=0.8, color=color[3])\n",
    "plt.xticks(rotation='vertical')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### 创建的时间集中在凌晨的1点到7点。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dispaly address count:  display_address\n",
      "                                           135\n",
      "\\tEast 10th Street and East 11th Street      1\n",
      "\\tWashington Street                          1\n",
      "                                             2\n",
      "  Allen street                               1\n",
      "  Hell's Kitchen, Midtown  West              3\n",
      "  Hell's Kitchen, Midtown West               2\n",
      "  Hell's Kitchen, Midtown West               4\n",
      " 11th Street                                 2\n",
      " 17th Street                                 1\n",
      " 1st Ave.                                    1\n",
      " 1st ave                                     1\n",
      " 236th Street                                1\n",
      " 2nd Ave.                                    3\n",
      " 2nd Street                                  1\n",
      " 2nd ave                                     1\n",
      " 30th Ave.                                   1\n",
      " 30th Avenue                                 1\n",
      " 32nd St.                                    2\n",
      " 330 east 30th street                        1\n",
      " 38th St.                                    1\n",
      " 42nd Road                                   1\n",
      " 485 AMSTERDAM AVENUE                        1\n",
      " 506 east 11                                 1\n",
      " 5th Avenue                                  1\n",
      " 67th Avenue                                 1\n",
      " 7th Avenue                                  1\n",
      " 88th street                                 1\n",
      " 9 ave                                       1\n",
      " 9th Street                                  1\n",
      "                                          ... \n",
      "waverly street and charles street            1\n",
      "west 152nd street                            1\n",
      "west 168th St                                1\n",
      "west 21st street                             1\n",
      "west 29 street & 8 ave                       1\n",
      "west 33rd st & 8th ave                       1\n",
      "west 43 street                               1\n",
      "west 48 street and then avenue               1\n",
      "west 4th street                              1\n",
      "west 50s                                     8\n",
      "west 50s & 6th avenue - NO FEE               1\n",
      "west 51st street                             1\n",
      "west 52nd st                                 1\n",
      "west 54 st & 8 ave                           1\n",
      "west 55 street & 6 ave                       1\n",
      "west 60s                                     1\n",
      "west 73rd street, Upper west side            1\n",
      "west 87                                      1\n",
      "west 98th street, Upper west side            1\n",
      "west 9th street, Greenwich village           1\n",
      "west Houston                                 1\n",
      "west st                                      1\n",
      "west st.                                     4\n",
      "west village                                 1\n",
      "williamsburg                                35\n",
      "williamsburg                                 2\n",
      "williamsburg  NO FEE                         1\n",
      "williamsburg - NO FEE                        8\n",
      "williamsburg Northside  NO FEE               1\n",
      "▇_▶SEE TODAY*330 East 117th St               1\n",
      "Name: display_address, Length: 8826, dtype: int64\n",
      "Display_address that appear less than 2 times 63.22%\n",
      "Display_address that appear less than 10 times 89.6%\n",
      "Display_address that appear less than 50 times 97.73%\n",
      "Display_address that appear less than 100 times 99.26%\n",
      "Display_address that appear less than 500 times 100.0%\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtoAAAF6CAYAAAAnGv9AAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3X24ZXVd9/H3h+FJQY8PkAnDMNgQ\ngVqm42CG3qRjgTpi3mqQTygyWXGrXZqSmEo1aXVXamI0KaKiIJkaYySKhGSSgKbeIFEjijOAIE8H\nUJOQ7/3HWoN7DufMnD2z1344835d177O3r/19N17/wY+53d+a61UFZIkSZIGa6dRFyBJkiQtRAZt\nSZIkqQMGbUmSJKkDBm1JkiSpAwZtSZIkqQMGbUmSJKkDBm1JkiSpAwZtSZIkqQMGbUmSJKkDBm1J\nkiSpAzuPuoBB2WuvvWrp0qWjLkOSJEkL3Je+9KWbqmrvra03tkE7yR7ARcCbq+qTW1t/6dKlXHbZ\nZd0XJkmSpB1akmvms97Qpo4kOS3JjUkun9F+RJKrkqxPcmLPotcDZw+rPkmSJGmQhjlH+3TgiN6G\nJIuAU4AjgUOAY5IckmQl8HXghiHWJ0mSJA3M0KaOVNVFSZbOaF4BrK+qqwGSnAUcBewJ7EETvn+Q\n5NyqumdYtUqSJEnba9RztPcFNvS83ggcWlUnACQ5FrhprpCdZDWwGmDJkiXdVipJkiT1YdSX98ss\nbXXvk6rTt3QiZFWtrarlVbV87723euKnJEmSNDSjDtobgf16Xi8GrhtRLZIkSdLAjDpoXwocmOSA\nJLsCRwPn9LODJKuSrJ2enu6kQEmSJGlbDPPyfmcCFwMHJdmY5Liquhs4ATgPuBI4u6qu6Ge/VbWu\nqlZPTU0NvmhJkiRpGw3zqiPHzNF+LnDusOqQJEmShmHUU0ckSZKkBWnig7ZztCVJkjSOJj5oO0db\nkiRJ42jUN6yZeCvWnD/nsktOWjnESiRJkjROJn5EW5IkSRpHBm1JkiSpAxMftD0ZUpIkSeNo4oO2\nJ0NKkiRpHE180JYkSZLGkUFbkiRJ6oBBW5IkSerAxAdtT4aUJEnSOJr4oO3JkJIkSRpHEx+0JUmS\npHFk0JYkSZI6YNCWJEmSOmDQliRJkjow8UHbq45IkiRpHE180PaqI5IkSRpHEx+0JUmSpHFk0JYk\nSZI6YNCWJEmSOmDQliRJkjpg0JYkSZI6MPFB28v7SZIkaRxNfND28n6SJEkaRxMftCVJkqRxZNCW\nJEmSOmDQliRJkjpg0JYkSZI6YNCWJEmSOmDQliRJkjpg0JYkSZI6YNCWJEmSOjDxQds7Q0qSJGkc\nTXzQ9s6QkiRJGkcTH7QlSZKkcWTQliRJkjpg0JYkSZI6YNCWJEmSOmDQliRJkjpg0JYkSZI6YNCW\nJEmSOmDQliRJkjpg0JYkSZI6YNCWJEmSOmDQliRJkjow8UE7yaoka6enp0ddiiRJknSviQ/aVbWu\nqlZPTU2NuhRJkiTpXhMftCVJkqRxZNCWJEmSOmDQliRJkjpg0JYkSZI6YNCWJEmSOmDQliRJkjpg\n0JYkSZI6YNCWJEmSOmDQliRJkjpg0JYkSZI6YNCWJEmSOmDQliRJkjpg0JYkSZI6YNCWJEmSOmDQ\nliRJkjpg0JYkSZI6YNCWJEmSOjCWQTvJwUlOTfLRJL856nokSZKkfg0taCc5LcmNSS6f0X5EkquS\nrE9yIkBVXVlVrwCeDywfVo2SJEnSoAxzRPt04IjehiSLgFOAI4FDgGOSHNIuexbweeCzQ6xRkiRJ\nGoihBe2qugi4ZUbzCmB9VV1dVXcBZwFHteufU1VPBF4wrBolSZKkQdl5xMffF9jQ83ojcGiSw4Hn\nALsB5861cZLVwGqAJUuWdFelJEmS1KdRB+3M0lZVdSFw4dY2rqq1wFqA5cuX10ArkyRJkrbDqK86\nshHYr+f1YuC6EdUiSZIkDcyog/alwIFJDkiyK3A0cM6Ia5IkSZK22zAv73cmcDFwUJKNSY6rqruB\nE4DzgCuBs6vqij73uyrJ2unp6cEXLUmSJG2joc3Rrqpj5mg/ly2c8DiP/a4D1i1fvvz4bd2HJEmS\nNGijnjoiSZIkLUgGbUmSJKkDEx+0naMtSZKkcTTxQbuq1lXV6qmpqVGXIkmSJN1r4oO2JEmSNI4M\n2pIkSVIHJj5oO0dbkiRJ42jig7ZztCVJkjSOJj5oS5IkSePIoC1JkiR1wKAtSZIkdWDig7YnQ0qS\nJGkcTXzQ9mRISZIkjaOJD9qSJEnSODJoS5IkSR0waEuSJEkdMGhLkiRJHZj4oO1VRyRJkjSOJj5o\ne9URSZIkjaOJD9qSJEnSODJoS5IkSR0waEuSJEkdMGhLkiRJHTBoS5IkSR3YedQFLGQr1pw/a/sl\n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\nMdXA+Mt+H7MAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a32298400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# display_address \n",
    "cnt_srs = train.groupby('display_address')['display_address'].count()\n",
    "print(\"dispaly address count: \", cnt_srs)\n",
    "\n",
    "for i in [2, 10, 50, 100, 500]:\n",
    "    print('Display_address that appear less than {} times {}%'.format(i, round((cnt_srs < i).mean() * 100, 2)))\n",
    "\n",
    "plt.figure(figsize=(12, 6))\n",
    "plt.hist(cnt_srs.values, bins=100, log=True, alpha=0.9)\n",
    "plt.xlabel('Number of times display_address appeared', fontsize=12)\n",
    "plt.ylabel('log(Count)', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n+v9hVOEKHc1mpQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a31fe1fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# number of photos\n",
    "train[\"num_photos\"] = train[\"photos\"].apply(len)\n",
    "cnt_srs = train['num_photos'].value_counts()\n",
    "\n",
    "plt.figure(figsize=(12,6))\n",
    "sns.barplot(cnt_srs.index, cnt_srs.values, alpha=0.8)\n",
    "plt.xlabel(\"Number of Photos\", fontsize=12)\n",
    "plt.ylabel(\"Number of Occurrences\", fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "features value counts : 3     6211\n",
      "4     5459\n",
      "2     4938\n",
      "5     4547\n",
      "1     4340\n",
      "6     3835\n",
      "7     3374\n",
      "0     3218\n",
      "8     2840\n",
      "9     2453\n",
      "10    2217\n",
      "11    1681\n",
      "12    1377\n",
      "13    1009\n",
      "14     737\n",
      "15     456\n",
      "16     283\n",
      "17     161\n",
      "18      89\n",
      "19      45\n",
      "20      24\n",
      "21      14\n",
      "22      13\n",
      "26       8\n",
      "23       6\n",
      "24       5\n",
      "28       3\n",
      "27       3\n",
      "25       2\n",
      "39       1\n",
      "36       1\n",
      "32       1\n",
      "31       1\n",
      "Name: num_features, dtype: int64\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a31fbc1d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# num of feature\n",
    "train[\"num_features\"] = train[\"features\"].apply(len)\n",
    "cnt_srs = train['num_features'].value_counts()\n",
    "print(\"features value counts :\", cnt_srs)\n",
    "\n",
    "plt.figure(figsize=(12,6))\n",
    "sns.barplot(cnt_srs.index, cnt_srs.values, alpha=0.8)\n",
    "plt.ylabel('Number of Occurrences', fontsize=12)\n",
    "plt.xlabel('Number of features', fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 处理特征值及创新新的特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>building_id</th>\n",
       "      <th>created</th>\n",
       "      <th>description</th>\n",
       "      <th>display_address</th>\n",
       "      <th>features</th>\n",
       "      <th>interest_level</th>\n",
       "      <th>latitude</th>\n",
       "      <th>listing_id</th>\n",
       "      <th>longitude</th>\n",
       "      <th>manager_id</th>\n",
       "      <th>photos</th>\n",
       "      <th>price</th>\n",
       "      <th>street_address</th>\n",
       "      <th>date_created</th>\n",
       "      <th>hour_created</th>\n",
       "      <th>num_photos</th>\n",
       "      <th>num_features</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>53a5b119ba8f7b61d4e010512e0dfc85</td>\n",
       "      <td>2016-06-24 07:54:24</td>\n",
       "      <td>A Brand New 3 Bedroom 1.5 bath ApartmentEnjoy ...</td>\n",
       "      <td>Metropolitan Avenue</td>\n",
       "      <td>[]</td>\n",
       "      <td>medium</td>\n",
       "      <td>40.7145</td>\n",
       "      <td>7211212</td>\n",
       "      <td>-73.9425</td>\n",
       "      <td>5ba989232d0489da1b5f2c45f6688adc</td>\n",
       "      <td>[https://photos.renthop.com/2/7211212_1ed4542e...</td>\n",
       "      <td>3000.0</td>\n",
       "      <td>792 Metropolitan Avenue</td>\n",
       "      <td>2016-06-24</td>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10000</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>c5c8a357cba207596b04d1afd1e4f130</td>\n",
       "      <td>2016-06-12 12:19:27</td>\n",
       "      <td></td>\n",
       "      <td>Columbus Avenue</td>\n",
       "      <td>[Doorman, Elevator, Fitness Center, Cats Allow...</td>\n",
       "      <td>low</td>\n",
       "      <td>40.7947</td>\n",
       "      <td>7150865</td>\n",
       "      <td>-73.9667</td>\n",
       "      <td>7533621a882f71e25173b27e3139d83d</td>\n",
       "      <td>[https://photos.renthop.com/2/7150865_be3306c5...</td>\n",
       "      <td>5465.0</td>\n",
       "      <td>808 Columbus Avenue</td>\n",
       "      <td>2016-06-12</td>\n",
       "      <td>12</td>\n",
       "      <td>11</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100004</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>c3ba40552e2120b0acfc3cb5730bb2aa</td>\n",
       "      <td>2016-04-17 03:26:41</td>\n",
       "      <td>Top Top West Village location, beautiful Pre-w...</td>\n",
       "      <td>W 13 Street</td>\n",
       "      <td>[Laundry In Building, Dishwasher, Hardwood Flo...</td>\n",
       "      <td>high</td>\n",
       "      <td>40.7388</td>\n",
       "      <td>6887163</td>\n",
       "      <td>-74.0018</td>\n",
       "      <td>d9039c43983f6e564b1482b273bd7b01</td>\n",
       "      <td>[https://photos.renthop.com/2/6887163_de85c427...</td>\n",
       "      <td>2850.0</td>\n",
       "      <td>241 W 13 Street</td>\n",
       "      <td>2016-04-17</td>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100007</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>28d9ad350afeaab8027513a3e52ac8d5</td>\n",
       "      <td>2016-04-18 02:22:02</td>\n",
       "      <td>Building Amenities - Garage - Garden - fitness...</td>\n",
       "      <td>East 49th Street</td>\n",
       "      <td>[Hardwood Floors, No Fee]</td>\n",
       "      <td>low</td>\n",
       "      <td>40.7539</td>\n",
       "      <td>6888711</td>\n",
       "      <td>-73.9677</td>\n",
       "      <td>1067e078446a7897d2da493d2f741316</td>\n",
       "      <td>[https://photos.renthop.com/2/6888711_6e660cee...</td>\n",
       "      <td>3275.0</td>\n",
       "      <td>333 East 49th Street</td>\n",
       "      <td>2016-04-18</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100013</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>2016-04-28 01:32:41</td>\n",
       "      <td>Beautifully renovated 3 bedroom flex 4 bedroom...</td>\n",
       "      <td>West 143rd Street</td>\n",
       "      <td>[Pre-War]</td>\n",
       "      <td>low</td>\n",
       "      <td>40.8241</td>\n",
       "      <td>6934781</td>\n",
       "      <td>-73.9493</td>\n",
       "      <td>98e13ad4b495b9613cef886d79a6291f</td>\n",
       "      <td>[https://photos.renthop.com/2/6934781_1fa4b41a...</td>\n",
       "      <td>3350.0</td>\n",
       "      <td>500 West 143rd Street</td>\n",
       "      <td>2016-04-28</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        bathrooms  bedrooms                       building_id  \\\n",
       "10            1.5         3  53a5b119ba8f7b61d4e010512e0dfc85   \n",
       "10000         1.0         2  c5c8a357cba207596b04d1afd1e4f130   \n",
       "100004        1.0         1  c3ba40552e2120b0acfc3cb5730bb2aa   \n",
       "100007        1.0         1  28d9ad350afeaab8027513a3e52ac8d5   \n",
       "100013        1.0         4                                 0   \n",
       "\n",
       "                   created                                        description  \\\n",
       "10     2016-06-24 07:54:24  A Brand New 3 Bedroom 1.5 bath ApartmentEnjoy ...   \n",
       "10000  2016-06-12 12:19:27                                                      \n",
       "100004 2016-04-17 03:26:41  Top Top West Village location, beautiful Pre-w...   \n",
       "100007 2016-04-18 02:22:02  Building Amenities - Garage - Garden - fitness...   \n",
       "100013 2016-04-28 01:32:41  Beautifully renovated 3 bedroom flex 4 bedroom...   \n",
       "\n",
       "            display_address  \\\n",
       "10      Metropolitan Avenue   \n",
       "10000       Columbus Avenue   \n",
       "100004          W 13 Street   \n",
       "100007     East 49th Street   \n",
       "100013    West 143rd Street   \n",
       "\n",
       "                                                 features interest_level  \\\n",
       "10                                                     []         medium   \n",
       "10000   [Doorman, Elevator, Fitness Center, Cats Allow...            low   \n",
       "100004  [Laundry In Building, Dishwasher, Hardwood Flo...           high   \n",
       "100007                          [Hardwood Floors, No Fee]            low   \n",
       "100013                                          [Pre-War]            low   \n",
       "\n",
       "        latitude  listing_id  longitude                        manager_id  \\\n",
       "10       40.7145     7211212   -73.9425  5ba989232d0489da1b5f2c45f6688adc   \n",
       "10000    40.7947     7150865   -73.9667  7533621a882f71e25173b27e3139d83d   \n",
       "100004   40.7388     6887163   -74.0018  d9039c43983f6e564b1482b273bd7b01   \n",
       "100007   40.7539     6888711   -73.9677  1067e078446a7897d2da493d2f741316   \n",
       "100013   40.8241     6934781   -73.9493  98e13ad4b495b9613cef886d79a6291f   \n",
       "\n",
       "                                                   photos   price  \\\n",
       "10      [https://photos.renthop.com/2/7211212_1ed4542e...  3000.0   \n",
       "10000   [https://photos.renthop.com/2/7150865_be3306c5...  5465.0   \n",
       "100004  [https://photos.renthop.com/2/6887163_de85c427...  2850.0   \n",
       "100007  [https://photos.renthop.com/2/6888711_6e660cee...  3275.0   \n",
       "100013  [https://photos.renthop.com/2/6934781_1fa4b41a...  3350.0   \n",
       "\n",
       "                 street_address date_created  hour_created  num_photos  \\\n",
       "10      792 Metropolitan Avenue   2016-06-24             7           5   \n",
       "10000       808 Columbus Avenue   2016-06-12            12          11   \n",
       "100004          241 W 13 Street   2016-04-17             3           8   \n",
       "100007     333 East 49th Street   2016-04-18             2           3   \n",
       "100013    500 West 143rd Street   2016-04-28             1           3   \n",
       "\n",
       "        num_features  \n",
       "10                 0  \n",
       "10000              5  \n",
       "100004             4  \n",
       "100007             2  \n",
       "100013             1  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 处理object数据\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 49352 entries, 10 to 99994\n",
      "Data columns (total 19 columns):\n",
      "bathrooms          49352 non-null float64\n",
      "bedrooms           49352 non-null int64\n",
      "building_id        49352 non-null object\n",
      "created            49352 non-null datetime64[ns]\n",
      "description        49352 non-null object\n",
      "display_address    49352 non-null object\n",
      "features           49352 non-null object\n",
      "interest_level     49352 non-null object\n",
      "latitude           49352 non-null float64\n",
      "listing_id         49352 non-null int64\n",
      "longitude          49352 non-null float64\n",
      "manager_id         49352 non-null object\n",
      "photos             49352 non-null object\n",
      "price              49352 non-null float64\n",
      "street_address     49352 non-null object\n",
      "date_created       49352 non-null object\n",
      "hour_created       49352 non-null int64\n",
      "num_photos         49352 non-null int64\n",
      "num_features       49352 non-null int64\n",
      "dtypes: datetime64[ns](1), float64(4), int64(5), object(9)\n",
      "memory usage: 8.8+ MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>building_id</th>\n",
       "      <th>created</th>\n",
       "      <th>description</th>\n",
       "      <th>display_address</th>\n",
       "      <th>features</th>\n",
       "      <th>latitude</th>\n",
       "      <th>listing_id</th>\n",
       "      <th>longitude</th>\n",
       "      <th>manager_id</th>\n",
       "      <th>photos</th>\n",
       "      <th>price</th>\n",
       "      <th>street_address</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>79780be1514f645d7e6be99a3de696c5</td>\n",
       "      <td>2016-06-11 05:29:41</td>\n",
       "      <td>Large with awesome terrace--accessible via bed...</td>\n",
       "      <td>Suffolk Street</td>\n",
       "      <td>[Elevator, Laundry in Building, Laundry in Uni...</td>\n",
       "      <td>40.7185</td>\n",
       "      <td>7142618</td>\n",
       "      <td>-73.9865</td>\n",
       "      <td>b1b1852c416d78d7765d746cb1b8921f</td>\n",
       "      <td>[https://photos.renthop.com/2/7142618_1c45a2c8...</td>\n",
       "      <td>2950</td>\n",
       "      <td>99 Suffolk Street</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2016-06-24 06:36:34</td>\n",
       "      <td>Prime Soho - between Bleecker and Houston - Ne...</td>\n",
       "      <td>Thompson Street</td>\n",
       "      <td>[Pre-War, Dogs Allowed, Cats Allowed]</td>\n",
       "      <td>40.7278</td>\n",
       "      <td>7210040</td>\n",
       "      <td>-74.0000</td>\n",
       "      <td>d0b5648017832b2427eeb9956d966a14</td>\n",
       "      <td>[https://photos.renthop.com/2/7210040_d824cc71...</td>\n",
       "      <td>2850</td>\n",
       "      <td>176 Thompson Street</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3dbbb69fd52e0d25131aa1cd459c87eb</td>\n",
       "      <td>2016-06-03 04:29:40</td>\n",
       "      <td>New York chic has reached a new level ...</td>\n",
       "      <td>101 East 10th Street</td>\n",
       "      <td>[Doorman, Elevator, No Fee]</td>\n",
       "      <td>40.7306</td>\n",
       "      <td>7103890</td>\n",
       "      <td>-73.9890</td>\n",
       "      <td>9ca6f3baa475c37a3b3521a394d65467</td>\n",
       "      <td>[https://photos.renthop.com/2/7103890_85b33077...</td>\n",
       "      <td>3758</td>\n",
       "      <td>101 East 10th Street</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1000</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>783d21d013a7e655bddc4ed0d461cc5e</td>\n",
       "      <td>2016-06-11 06:17:35</td>\n",
       "      <td>Step into this fantastic new Construction in t...</td>\n",
       "      <td>South Third Street\\r</td>\n",
       "      <td>[Roof Deck, Balcony, Elevator, Laundry in Buil...</td>\n",
       "      <td>40.7109</td>\n",
       "      <td>7143442</td>\n",
       "      <td>-73.9571</td>\n",
       "      <td>0b9d5db96db8472d7aeb67c67338c4d2</td>\n",
       "      <td>[https://photos.renthop.com/2/7143442_0879e9e0...</td>\n",
       "      <td>3300</td>\n",
       "      <td>251  South Third Street\\r</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100000</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6134e7c4dd1a98d9aee36623c9872b49</td>\n",
       "      <td>2016-04-12 05:24:17</td>\n",
       "      <td>~Take a stroll in Central Park, enjoy the ente...</td>\n",
       "      <td>Midtown West, 8th Ave</td>\n",
       "      <td>[Common Outdoor Space, Cats Allowed, Dogs Allo...</td>\n",
       "      <td>40.7650</td>\n",
       "      <td>6860601</td>\n",
       "      <td>-73.9845</td>\n",
       "      <td>b5eda0eb31b042ce2124fd9e9fcfce2f</td>\n",
       "      <td>[https://photos.renthop.com/2/6860601_c96164d8...</td>\n",
       "      <td>4900</td>\n",
       "      <td>260 West 54th Street</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        bathrooms  bedrooms                       building_id  \\\n",
       "0             1.0         1  79780be1514f645d7e6be99a3de696c5   \n",
       "1             1.0         2                                 0   \n",
       "100           1.0         1  3dbbb69fd52e0d25131aa1cd459c87eb   \n",
       "1000          1.0         2  783d21d013a7e655bddc4ed0d461cc5e   \n",
       "100000        2.0         2  6134e7c4dd1a98d9aee36623c9872b49   \n",
       "\n",
       "                    created  \\\n",
       "0       2016-06-11 05:29:41   \n",
       "1       2016-06-24 06:36:34   \n",
       "100     2016-06-03 04:29:40   \n",
       "1000    2016-06-11 06:17:35   \n",
       "100000  2016-04-12 05:24:17   \n",
       "\n",
       "                                              description  \\\n",
       "0       Large with awesome terrace--accessible via bed...   \n",
       "1       Prime Soho - between Bleecker and Houston - Ne...   \n",
       "100             New York chic has reached a new level ...   \n",
       "1000    Step into this fantastic new Construction in t...   \n",
       "100000  ~Take a stroll in Central Park, enjoy the ente...   \n",
       "\n",
       "              display_address  \\\n",
       "0              Suffolk Street   \n",
       "1             Thompson Street   \n",
       "100      101 East 10th Street   \n",
       "1000     South Third Street\\r   \n",
       "100000  Midtown West, 8th Ave   \n",
       "\n",
       "                                                 features  latitude  \\\n",
       "0       [Elevator, Laundry in Building, Laundry in Uni...   40.7185   \n",
       "1                   [Pre-War, Dogs Allowed, Cats Allowed]   40.7278   \n",
       "100                           [Doorman, Elevator, No Fee]   40.7306   \n",
       "1000    [Roof Deck, Balcony, Elevator, Laundry in Buil...   40.7109   \n",
       "100000  [Common Outdoor Space, Cats Allowed, Dogs Allo...   40.7650   \n",
       "\n",
       "        listing_id  longitude                        manager_id  \\\n",
       "0          7142618   -73.9865  b1b1852c416d78d7765d746cb1b8921f   \n",
       "1          7210040   -74.0000  d0b5648017832b2427eeb9956d966a14   \n",
       "100        7103890   -73.9890  9ca6f3baa475c37a3b3521a394d65467   \n",
       "1000       7143442   -73.9571  0b9d5db96db8472d7aeb67c67338c4d2   \n",
       "100000     6860601   -73.9845  b5eda0eb31b042ce2124fd9e9fcfce2f   \n",
       "\n",
       "                                                   photos  price  \\\n",
       "0       [https://photos.renthop.com/2/7142618_1c45a2c8...   2950   \n",
       "1       [https://photos.renthop.com/2/7210040_d824cc71...   2850   \n",
       "100     [https://photos.renthop.com/2/7103890_85b33077...   3758   \n",
       "1000    [https://photos.renthop.com/2/7143442_0879e9e0...   3300   \n",
       "100000  [https://photos.renthop.com/2/6860601_c96164d8...   4900   \n",
       "\n",
       "                   street_address  \n",
       "0               99 Suffolk Street  \n",
       "1             176 Thompson Street  \n",
       "100          101 East 10th Street  \n",
       "1000    251  South Third Street\\r  \n",
       "100000       260 West 54th Street  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读入测试数据，为特征处理做准备\n",
    "test = pd.read_json(\"test.json\")\n",
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数字化特征值 \n",
    "# hour_created       49352 non-null int64\n",
    "# num_photos         49352 non-null int64\n",
    "# num_features  \n",
    "def numberical(df):\n",
    "    df['num_description_words'] = df['description'].apply(lambda x: len(x.split(\" \")))\n",
    "    df['created'] = pd.to_datetime(df['created'])\n",
    "    df['year_created'] = df['created'].dt.year\n",
    "    df['month_created'] = df['created'].dt.month\n",
    "    df['day_created'] = df['created'].dt.day\n",
    "    df['hour_created'] = df['created'].dt.hour\n",
    "    df['num_photos'] = df['photos'].apply(len)\n",
    "    df['num_features'] = df['features'].apply(len)\n",
    "    \n",
    "    return df\n",
    "train = numberical(train)\n",
    "test = numberical(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>building_id</th>\n",
       "      <th>created</th>\n",
       "      <th>description</th>\n",
       "      <th>display_address</th>\n",
       "      <th>features</th>\n",
       "      <th>interest_level</th>\n",
       "      <th>latitude</th>\n",
       "      <th>listing_id</th>\n",
       "      <th>...</th>\n",
       "      <th>price</th>\n",
       "      <th>street_address</th>\n",
       "      <th>date_created</th>\n",
       "      <th>hour_created</th>\n",
       "      <th>num_photos</th>\n",
       "      <th>num_features</th>\n",
       "      <th>num_description_words</th>\n",
       "      <th>year_created</th>\n",
       "      <th>month_created</th>\n",
       "      <th>day_created</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>53a5b119ba8f7b61d4e010512e0dfc85</td>\n",
       "      <td>2016-06-24 07:54:24</td>\n",
       "      <td>A Brand New 3 Bedroom 1.5 bath ApartmentEnjoy ...</td>\n",
       "      <td>Metropolitan Avenue</td>\n",
       "      <td>[]</td>\n",
       "      <td>medium</td>\n",
       "      <td>40.7145</td>\n",
       "      <td>7211212</td>\n",
       "      <td>...</td>\n",
       "      <td>3000.0</td>\n",
       "      <td>792 Metropolitan Avenue</td>\n",
       "      <td>2016-06-24</td>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>95</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10000</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>c5c8a357cba207596b04d1afd1e4f130</td>\n",
       "      <td>2016-06-12 12:19:27</td>\n",
       "      <td></td>\n",
       "      <td>Columbus Avenue</td>\n",
       "      <td>[Doorman, Elevator, Fitness Center, Cats Allow...</td>\n",
       "      <td>low</td>\n",
       "      <td>40.7947</td>\n",
       "      <td>7150865</td>\n",
       "      <td>...</td>\n",
       "      <td>5465.0</td>\n",
       "      <td>808 Columbus Avenue</td>\n",
       "      <td>2016-06-12</td>\n",
       "      <td>12</td>\n",
       "      <td>11</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100004</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>c3ba40552e2120b0acfc3cb5730bb2aa</td>\n",
       "      <td>2016-04-17 03:26:41</td>\n",
       "      <td>Top Top West Village location, beautiful Pre-w...</td>\n",
       "      <td>W 13 Street</td>\n",
       "      <td>[Laundry In Building, Dishwasher, Hardwood Flo...</td>\n",
       "      <td>high</td>\n",
       "      <td>40.7388</td>\n",
       "      <td>6887163</td>\n",
       "      <td>...</td>\n",
       "      <td>2850.0</td>\n",
       "      <td>241 W 13 Street</td>\n",
       "      <td>2016-04-17</td>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>94</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100007</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>28d9ad350afeaab8027513a3e52ac8d5</td>\n",
       "      <td>2016-04-18 02:22:02</td>\n",
       "      <td>Building Amenities - Garage - Garden - fitness...</td>\n",
       "      <td>East 49th Street</td>\n",
       "      <td>[Hardwood Floors, No Fee]</td>\n",
       "      <td>low</td>\n",
       "      <td>40.7539</td>\n",
       "      <td>6888711</td>\n",
       "      <td>...</td>\n",
       "      <td>3275.0</td>\n",
       "      <td>333 East 49th Street</td>\n",
       "      <td>2016-04-18</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>80</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100013</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>2016-04-28 01:32:41</td>\n",
       "      <td>Beautifully renovated 3 bedroom flex 4 bedroom...</td>\n",
       "      <td>West 143rd Street</td>\n",
       "      <td>[Pre-War]</td>\n",
       "      <td>low</td>\n",
       "      <td>40.8241</td>\n",
       "      <td>6934781</td>\n",
       "      <td>...</td>\n",
       "      <td>3350.0</td>\n",
       "      <td>500 West 143rd Street</td>\n",
       "      <td>2016-04-28</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>68</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        bathrooms  bedrooms                       building_id  \\\n",
       "10            1.5         3  53a5b119ba8f7b61d4e010512e0dfc85   \n",
       "10000         1.0         2  c5c8a357cba207596b04d1afd1e4f130   \n",
       "100004        1.0         1  c3ba40552e2120b0acfc3cb5730bb2aa   \n",
       "100007        1.0         1  28d9ad350afeaab8027513a3e52ac8d5   \n",
       "100013        1.0         4                                 0   \n",
       "\n",
       "                   created                                        description  \\\n",
       "10     2016-06-24 07:54:24  A Brand New 3 Bedroom 1.5 bath ApartmentEnjoy ...   \n",
       "10000  2016-06-12 12:19:27                                                      \n",
       "100004 2016-04-17 03:26:41  Top Top West Village location, beautiful Pre-w...   \n",
       "100007 2016-04-18 02:22:02  Building Amenities - Garage - Garden - fitness...   \n",
       "100013 2016-04-28 01:32:41  Beautifully renovated 3 bedroom flex 4 bedroom...   \n",
       "\n",
       "            display_address  \\\n",
       "10      Metropolitan Avenue   \n",
       "10000       Columbus Avenue   \n",
       "100004          W 13 Street   \n",
       "100007     East 49th Street   \n",
       "100013    West 143rd Street   \n",
       "\n",
       "                                                 features interest_level  \\\n",
       "10                                                     []         medium   \n",
       "10000   [Doorman, Elevator, Fitness Center, Cats Allow...            low   \n",
       "100004  [Laundry In Building, Dishwasher, Hardwood Flo...           high   \n",
       "100007                          [Hardwood Floors, No Fee]            low   \n",
       "100013                                          [Pre-War]            low   \n",
       "\n",
       "        latitude  listing_id     ...        price           street_address  \\\n",
       "10       40.7145     7211212     ...       3000.0  792 Metropolitan Avenue   \n",
       "10000    40.7947     7150865     ...       5465.0      808 Columbus Avenue   \n",
       "100004   40.7388     6887163     ...       2850.0          241 W 13 Street   \n",
       "100007   40.7539     6888711     ...       3275.0     333 East 49th Street   \n",
       "100013   40.8241     6934781     ...       3350.0    500 West 143rd Street   \n",
       "\n",
       "       date_created  hour_created num_photos num_features  \\\n",
       "10       2016-06-24             7          5            0   \n",
       "10000    2016-06-12            12         11            5   \n",
       "100004   2016-04-17             3          8            4   \n",
       "100007   2016-04-18             2          3            2   \n",
       "100013   2016-04-28             1          3            1   \n",
       "\n",
       "        num_description_words  year_created  month_created  day_created  \n",
       "10                         95          2016              6           24  \n",
       "10000                       9          2016              6           12  \n",
       "100004                     94          2016              4           17  \n",
       "100007                     80          2016              4           18  \n",
       "100013                     68          2016              4           28  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>building_id</th>\n",
       "      <th>created</th>\n",
       "      <th>description</th>\n",
       "      <th>display_address</th>\n",
       "      <th>features</th>\n",
       "      <th>latitude</th>\n",
       "      <th>listing_id</th>\n",
       "      <th>longitude</th>\n",
       "      <th>...</th>\n",
       "      <th>photos</th>\n",
       "      <th>price</th>\n",
       "      <th>street_address</th>\n",
       "      <th>num_description_words</th>\n",
       "      <th>year_created</th>\n",
       "      <th>month_created</th>\n",
       "      <th>day_created</th>\n",
       "      <th>hour_created</th>\n",
       "      <th>num_photos</th>\n",
       "      <th>num_features</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>79780be1514f645d7e6be99a3de696c5</td>\n",
       "      <td>2016-06-11 05:29:41</td>\n",
       "      <td>Large with awesome terrace--accessible via bed...</td>\n",
       "      <td>Suffolk Street</td>\n",
       "      <td>[Elevator, Laundry in Building, Laundry in Uni...</td>\n",
       "      <td>40.7185</td>\n",
       "      <td>7142618</td>\n",
       "      <td>-73.9865</td>\n",
       "      <td>...</td>\n",
       "      <td>[https://photos.renthop.com/2/7142618_1c45a2c8...</td>\n",
       "      <td>2950</td>\n",
       "      <td>99 Suffolk Street</td>\n",
       "      <td>78</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2016-06-24 06:36:34</td>\n",
       "      <td>Prime Soho - between Bleecker and Houston - Ne...</td>\n",
       "      <td>Thompson Street</td>\n",
       "      <td>[Pre-War, Dogs Allowed, Cats Allowed]</td>\n",
       "      <td>40.7278</td>\n",
       "      <td>7210040</td>\n",
       "      <td>-74.0000</td>\n",
       "      <td>...</td>\n",
       "      <td>[https://photos.renthop.com/2/7210040_d824cc71...</td>\n",
       "      <td>2850</td>\n",
       "      <td>176 Thompson Street</td>\n",
       "      <td>35</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3dbbb69fd52e0d25131aa1cd459c87eb</td>\n",
       "      <td>2016-06-03 04:29:40</td>\n",
       "      <td>New York chic has reached a new level ...</td>\n",
       "      <td>101 East 10th Street</td>\n",
       "      <td>[Doorman, Elevator, No Fee]</td>\n",
       "      <td>40.7306</td>\n",
       "      <td>7103890</td>\n",
       "      <td>-73.9890</td>\n",
       "      <td>...</td>\n",
       "      <td>[https://photos.renthop.com/2/7103890_85b33077...</td>\n",
       "      <td>3758</td>\n",
       "      <td>101 East 10th Street</td>\n",
       "      <td>333</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1000</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>783d21d013a7e655bddc4ed0d461cc5e</td>\n",
       "      <td>2016-06-11 06:17:35</td>\n",
       "      <td>Step into this fantastic new Construction in t...</td>\n",
       "      <td>South Third Street\\r</td>\n",
       "      <td>[Roof Deck, Balcony, Elevator, Laundry in Buil...</td>\n",
       "      <td>40.7109</td>\n",
       "      <td>7143442</td>\n",
       "      <td>-73.9571</td>\n",
       "      <td>...</td>\n",
       "      <td>[https://photos.renthop.com/2/7143442_0879e9e0...</td>\n",
       "      <td>3300</td>\n",
       "      <td>251  South Third Street\\r</td>\n",
       "      <td>204</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100000</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6134e7c4dd1a98d9aee36623c9872b49</td>\n",
       "      <td>2016-04-12 05:24:17</td>\n",
       "      <td>~Take a stroll in Central Park, enjoy the ente...</td>\n",
       "      <td>Midtown West, 8th Ave</td>\n",
       "      <td>[Common Outdoor Space, Cats Allowed, Dogs Allo...</td>\n",
       "      <td>40.7650</td>\n",
       "      <td>6860601</td>\n",
       "      <td>-73.9845</td>\n",
       "      <td>...</td>\n",
       "      <td>[https://photos.renthop.com/2/6860601_c96164d8...</td>\n",
       "      <td>4900</td>\n",
       "      <td>260 West 54th Street</td>\n",
       "      <td>174</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        bathrooms  bedrooms                       building_id  \\\n",
       "0             1.0         1  79780be1514f645d7e6be99a3de696c5   \n",
       "1             1.0         2                                 0   \n",
       "100           1.0         1  3dbbb69fd52e0d25131aa1cd459c87eb   \n",
       "1000          1.0         2  783d21d013a7e655bddc4ed0d461cc5e   \n",
       "100000        2.0         2  6134e7c4dd1a98d9aee36623c9872b49   \n",
       "\n",
       "                   created                                        description  \\\n",
       "0      2016-06-11 05:29:41  Large with awesome terrace--accessible via bed...   \n",
       "1      2016-06-24 06:36:34  Prime Soho - between Bleecker and Houston - Ne...   \n",
       "100    2016-06-03 04:29:40          New York chic has reached a new level ...   \n",
       "1000   2016-06-11 06:17:35  Step into this fantastic new Construction in t...   \n",
       "100000 2016-04-12 05:24:17  ~Take a stroll in Central Park, enjoy the ente...   \n",
       "\n",
       "              display_address  \\\n",
       "0              Suffolk Street   \n",
       "1             Thompson Street   \n",
       "100      101 East 10th Street   \n",
       "1000     South Third Street\\r   \n",
       "100000  Midtown West, 8th Ave   \n",
       "\n",
       "                                                 features  latitude  \\\n",
       "0       [Elevator, Laundry in Building, Laundry in Uni...   40.7185   \n",
       "1                   [Pre-War, Dogs Allowed, Cats Allowed]   40.7278   \n",
       "100                           [Doorman, Elevator, No Fee]   40.7306   \n",
       "1000    [Roof Deck, Balcony, Elevator, Laundry in Buil...   40.7109   \n",
       "100000  [Common Outdoor Space, Cats Allowed, Dogs Allo...   40.7650   \n",
       "\n",
       "        listing_id  longitude      ...       \\\n",
       "0          7142618   -73.9865      ...        \n",
       "1          7210040   -74.0000      ...        \n",
       "100        7103890   -73.9890      ...        \n",
       "1000       7143442   -73.9571      ...        \n",
       "100000     6860601   -73.9845      ...        \n",
       "\n",
       "                                                   photos price  \\\n",
       "0       [https://photos.renthop.com/2/7142618_1c45a2c8...  2950   \n",
       "1       [https://photos.renthop.com/2/7210040_d824cc71...  2850   \n",
       "100     [https://photos.renthop.com/2/7103890_85b33077...  3758   \n",
       "1000    [https://photos.renthop.com/2/7143442_0879e9e0...  3300   \n",
       "100000  [https://photos.renthop.com/2/6860601_c96164d8...  4900   \n",
       "\n",
       "                   street_address num_description_words  year_created  \\\n",
       "0               99 Suffolk Street                    78          2016   \n",
       "1             176 Thompson Street                    35          2016   \n",
       "100          101 East 10th Street                   333          2016   \n",
       "1000    251  South Third Street\\r                   204          2016   \n",
       "100000       260 West 54th Street                   174          2016   \n",
       "\n",
       "        month_created  day_created  hour_created  num_photos  num_features  \n",
       "0                   6           11             5           8             6  \n",
       "1                   6           24             6           3             3  \n",
       "100                 6            3             4           6             3  \n",
       "1000                6           11             6           6            10  \n",
       "100000              4           12             5           7            14  \n",
       "\n",
       "[5 rows x 21 columns]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 49352 entries, 10 to 99994\n",
      "Data columns (total 23 columns):\n",
      "bathrooms                49352 non-null float64\n",
      "bedrooms                 49352 non-null int64\n",
      "building_id              49352 non-null object\n",
      "created                  49352 non-null datetime64[ns]\n",
      "description              49352 non-null object\n",
      "display_address          49352 non-null object\n",
      "features                 49352 non-null object\n",
      "interest_level           49352 non-null object\n",
      "latitude                 49352 non-null float64\n",
      "listing_id               49352 non-null int64\n",
      "longitude                49352 non-null float64\n",
      "manager_id               49352 non-null object\n",
      "photos                   49352 non-null object\n",
      "price                    49352 non-null float64\n",
      "street_address           49352 non-null object\n",
      "date_created             49352 non-null object\n",
      "hour_created             49352 non-null int64\n",
      "num_photos               49352 non-null int64\n",
      "num_features             49352 non-null int64\n",
      "num_description_words    49352 non-null int64\n",
      "year_created             49352 non-null int64\n",
      "month_created            49352 non-null int64\n",
      "day_created              49352 non-null int64\n",
      "dtypes: datetime64[ns](1), float64(4), int64(9), object(9)\n",
      "memory usage: 10.3+ MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 74659 entries, 0 to 99999\n",
      "Data columns (total 21 columns):\n",
      "bathrooms                74659 non-null float64\n",
      "bedrooms                 74659 non-null int64\n",
      "building_id              74659 non-null object\n",
      "created                  74659 non-null datetime64[ns]\n",
      "description              74659 non-null object\n",
      "display_address          74659 non-null object\n",
      "features                 74659 non-null object\n",
      "latitude                 74659 non-null float64\n",
      "listing_id               74659 non-null int64\n",
      "longitude                74659 non-null float64\n",
      "manager_id               74659 non-null object\n",
      "photos                   74659 non-null object\n",
      "price                    74659 non-null int64\n",
      "street_address           74659 non-null object\n",
      "num_description_words    74659 non-null int64\n",
      "year_created             74659 non-null int64\n",
      "month_created            74659 non-null int64\n",
      "day_created              74659 non-null int64\n",
      "hour_created             74659 non-null int64\n",
      "num_photos               74659 non-null int64\n",
      "num_features             74659 non-null int64\n",
      "dtypes: datetime64[ns](1), float64(3), int64(10), object(7)\n",
      "memory usage: 12.5+ MB\n"
     ]
    }
   ],
   "source": [
    "test.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>building_id</th>\n",
       "      <th>created</th>\n",
       "      <th>description</th>\n",
       "      <th>display_address</th>\n",
       "      <th>features</th>\n",
       "      <th>interest_level</th>\n",
       "      <th>latitude</th>\n",
       "      <th>listing_id</th>\n",
       "      <th>...</th>\n",
       "      <th>price</th>\n",
       "      <th>street_address</th>\n",
       "      <th>date_created</th>\n",
       "      <th>hour_created</th>\n",
       "      <th>num_photos</th>\n",
       "      <th>num_features</th>\n",
       "      <th>num_description_words</th>\n",
       "      <th>year_created</th>\n",
       "      <th>month_created</th>\n",
       "      <th>day_created</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>53a5b119ba8f7b61d4e010512e0dfc85</td>\n",
       "      <td>2016-06-24 07:54:24</td>\n",
       "      <td>A Brand New 3 Bedroom 1.5 bath ApartmentEnjoy ...</td>\n",
       "      <td>Metropolitan Avenue</td>\n",
       "      <td>[]</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7145</td>\n",
       "      <td>7211212</td>\n",
       "      <td>...</td>\n",
       "      <td>3000.0</td>\n",
       "      <td>792 Metropolitan Avenue</td>\n",
       "      <td>2016-06-24</td>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>95</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10000</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>c5c8a357cba207596b04d1afd1e4f130</td>\n",
       "      <td>2016-06-12 12:19:27</td>\n",
       "      <td></td>\n",
       "      <td>Columbus Avenue</td>\n",
       "      <td>[Doorman, Elevator, Fitness Center, Cats Allow...</td>\n",
       "      <td>0</td>\n",
       "      <td>40.7947</td>\n",
       "      <td>7150865</td>\n",
       "      <td>...</td>\n",
       "      <td>5465.0</td>\n",
       "      <td>808 Columbus Avenue</td>\n",
       "      <td>2016-06-12</td>\n",
       "      <td>12</td>\n",
       "      <td>11</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100004</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>c3ba40552e2120b0acfc3cb5730bb2aa</td>\n",
       "      <td>2016-04-17 03:26:41</td>\n",
       "      <td>Top Top West Village location, beautiful Pre-w...</td>\n",
       "      <td>W 13 Street</td>\n",
       "      <td>[Laundry In Building, Dishwasher, Hardwood Flo...</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7388</td>\n",
       "      <td>6887163</td>\n",
       "      <td>...</td>\n",
       "      <td>2850.0</td>\n",
       "      <td>241 W 13 Street</td>\n",
       "      <td>2016-04-17</td>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>94</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100007</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>28d9ad350afeaab8027513a3e52ac8d5</td>\n",
       "      <td>2016-04-18 02:22:02</td>\n",
       "      <td>Building Amenities - Garage - Garden - fitness...</td>\n",
       "      <td>East 49th Street</td>\n",
       "      <td>[Hardwood Floors, No Fee]</td>\n",
       "      <td>0</td>\n",
       "      <td>40.7539</td>\n",
       "      <td>6888711</td>\n",
       "      <td>...</td>\n",
       "      <td>3275.0</td>\n",
       "      <td>333 East 49th Street</td>\n",
       "      <td>2016-04-18</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>80</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100013</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>2016-04-28 01:32:41</td>\n",
       "      <td>Beautifully renovated 3 bedroom flex 4 bedroom...</td>\n",
       "      <td>West 143rd Street</td>\n",
       "      <td>[Pre-War]</td>\n",
       "      <td>0</td>\n",
       "      <td>40.8241</td>\n",
       "      <td>6934781</td>\n",
       "      <td>...</td>\n",
       "      <td>3350.0</td>\n",
       "      <td>500 West 143rd Street</td>\n",
       "      <td>2016-04-28</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>68</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        bathrooms  bedrooms                       building_id  \\\n",
       "10            1.5         3  53a5b119ba8f7b61d4e010512e0dfc85   \n",
       "10000         1.0         2  c5c8a357cba207596b04d1afd1e4f130   \n",
       "100004        1.0         1  c3ba40552e2120b0acfc3cb5730bb2aa   \n",
       "100007        1.0         1  28d9ad350afeaab8027513a3e52ac8d5   \n",
       "100013        1.0         4                                 0   \n",
       "\n",
       "                   created                                        description  \\\n",
       "10     2016-06-24 07:54:24  A Brand New 3 Bedroom 1.5 bath ApartmentEnjoy ...   \n",
       "10000  2016-06-12 12:19:27                                                      \n",
       "100004 2016-04-17 03:26:41  Top Top West Village location, beautiful Pre-w...   \n",
       "100007 2016-04-18 02:22:02  Building Amenities - Garage - Garden - fitness...   \n",
       "100013 2016-04-28 01:32:41  Beautifully renovated 3 bedroom flex 4 bedroom...   \n",
       "\n",
       "            display_address  \\\n",
       "10      Metropolitan Avenue   \n",
       "10000       Columbus Avenue   \n",
       "100004          W 13 Street   \n",
       "100007     East 49th Street   \n",
       "100013    West 143rd Street   \n",
       "\n",
       "                                                 features  interest_level  \\\n",
       "10                                                     []               1   \n",
       "10000   [Doorman, Elevator, Fitness Center, Cats Allow...               0   \n",
       "100004  [Laundry In Building, Dishwasher, Hardwood Flo...               2   \n",
       "100007                          [Hardwood Floors, No Fee]               0   \n",
       "100013                                          [Pre-War]               0   \n",
       "\n",
       "        latitude  listing_id     ...        price           street_address  \\\n",
       "10       40.7145     7211212     ...       3000.0  792 Metropolitan Avenue   \n",
       "10000    40.7947     7150865     ...       5465.0      808 Columbus Avenue   \n",
       "100004   40.7388     6887163     ...       2850.0          241 W 13 Street   \n",
       "100007   40.7539     6888711     ...       3275.0     333 East 49th Street   \n",
       "100013   40.8241     6934781     ...       3350.0    500 West 143rd Street   \n",
       "\n",
       "       date_created  hour_created num_photos num_features  \\\n",
       "10       2016-06-24             7          5            0   \n",
       "10000    2016-06-12            12         11            5   \n",
       "100004   2016-04-17             3          8            4   \n",
       "100007   2016-04-18             2          3            2   \n",
       "100013   2016-04-28             1          3            1   \n",
       "\n",
       "        num_description_words  year_created  month_created  day_created  \n",
       "10                         95          2016              6           24  \n",
       "10000                       9          2016              6           12  \n",
       "100004                     94          2016              4           17  \n",
       "100007                     80          2016              4           18  \n",
       "100013                     68          2016              4           28  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# interest_level category to number\n",
    "train.replace({\"interest_level\" : {\"low\":0, \"medium\":1, \"high\":2}}, inplace=True)\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Numerical features : 12\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 49352 entries, 10 to 99994\n",
      "Data columns (total 12 columns):\n",
      "bathrooms                49352 non-null float64\n",
      "bedrooms                 49352 non-null int64\n",
      "latitude                 49352 non-null float64\n",
      "longitude                49352 non-null float64\n",
      "price                    49352 non-null float64\n",
      "hour_created             49352 non-null int64\n",
      "num_photos               49352 non-null int64\n",
      "num_features             49352 non-null int64\n",
      "num_description_words    49352 non-null int64\n",
      "year_created             49352 non-null int64\n",
      "month_created            49352 non-null int64\n",
      "day_created              49352 non-null int64\n",
      "dtypes: float64(4), int64(8)\n",
      "memory usage: 6.1 MB\n",
      "NAS for numerical features in df : 0\n"
     ]
    }
   ],
   "source": [
    "# 获取最终的特征，去除object列，并对数据进行标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "def fillna_numerical_train(df):\n",
    "    numerical_features = df.select_dtypes(exclude=['object']).columns\n",
    "    \n",
    "    numerical_features = numerical_features.drop(['interest_level', 'created', 'listing_id'])\n",
    "    print(\"Numerical features : \" + str(len(numerical_features)))\n",
    "    df_num = df[numerical_features]\n",
    "    df_num.info()\n",
    "    \n",
    "    medians = df_num.median()\n",
    "    print(\"NAS for numerical features in df : \" + str(df_num.isnull().values.sum()))\n",
    "    \n",
    "    ss_X = StandardScaler()\n",
    "    # 对训练特征标准化处理\n",
    "    temp = ss_X.fit_transform(df_num)\n",
    "    df_num = pd.DataFrame(data=temp, columns=numerical_features, index=df_num.index)\n",
    "    \n",
    "    return df_num, medians, ss_X\n",
    "\n",
    "train_num, medians, ss_X = fillna_numerical_train(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "      <th>price</th>\n",
       "      <th>hour_created</th>\n",
       "      <th>num_photos</th>\n",
       "      <th>num_features</th>\n",
       "      <th>num_description_words</th>\n",
       "      <th>year_created</th>\n",
       "      <th>month_created</th>\n",
       "      <th>day_created</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.628742</td>\n",
       "      <td>1.307938</td>\n",
       "      <td>-0.954215</td>\n",
       "      <td>1.069327</td>\n",
       "      <td>-0.329264</td>\n",
       "      <td>0.533454</td>\n",
       "      <td>-0.167099</td>\n",
       "      <td>-1.383625</td>\n",
       "      <td>0.081856</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.194938</td>\n",
       "      <td>1.061886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10000</th>\n",
       "      <td>-0.439700</td>\n",
       "      <td>0.411083</td>\n",
       "      <td>1.135833</td>\n",
       "      <td>0.208964</td>\n",
       "      <td>1.003907</td>\n",
       "      <td>1.726699</td>\n",
       "      <td>1.484771</td>\n",
       "      <td>-0.109210</td>\n",
       "      <td>-1.366111</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.194938</td>\n",
       "      <td>-0.387273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100004</th>\n",
       "      <td>-0.439700</td>\n",
       "      <td>-0.485772</td>\n",
       "      <td>-0.320946</td>\n",
       "      <td>-1.038917</td>\n",
       "      <td>-0.410390</td>\n",
       "      <td>-0.421141</td>\n",
       "      <td>0.658836</td>\n",
       "      <td>-0.364093</td>\n",
       "      <td>0.065019</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1.230969</td>\n",
       "      <td>0.216543</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100007</th>\n",
       "      <td>-0.439700</td>\n",
       "      <td>-0.485772</td>\n",
       "      <td>0.072567</td>\n",
       "      <td>0.173412</td>\n",
       "      <td>-0.180533</td>\n",
       "      <td>-0.659790</td>\n",
       "      <td>-0.717723</td>\n",
       "      <td>-0.873859</td>\n",
       "      <td>-0.170696</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1.230969</td>\n",
       "      <td>0.337306</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100013</th>\n",
       "      <td>-0.439700</td>\n",
       "      <td>2.204793</td>\n",
       "      <td>1.902011</td>\n",
       "      <td>0.827572</td>\n",
       "      <td>-0.139970</td>\n",
       "      <td>-0.898439</td>\n",
       "      <td>-0.717723</td>\n",
       "      <td>-1.128742</td>\n",
       "      <td>-0.372738</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1.230969</td>\n",
       "      <td>1.544939</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        bathrooms  bedrooms  latitude  longitude     price  hour_created  \\\n",
       "10       0.628742  1.307938 -0.954215   1.069327 -0.329264      0.533454   \n",
       "10000   -0.439700  0.411083  1.135833   0.208964  1.003907      1.726699   \n",
       "100004  -0.439700 -0.485772 -0.320946  -1.038917 -0.410390     -0.421141   \n",
       "100007  -0.439700 -0.485772  0.072567   0.173412 -0.180533     -0.659790   \n",
       "100013  -0.439700  2.204793  1.902011   0.827572 -0.139970     -0.898439   \n",
       "\n",
       "        num_photos  num_features  num_description_words  year_created  \\\n",
       "10       -0.167099     -1.383625               0.081856           0.0   \n",
       "10000     1.484771     -0.109210              -1.366111           0.0   \n",
       "100004    0.658836     -0.364093               0.065019           0.0   \n",
       "100007   -0.717723     -0.873859              -0.170696           0.0   \n",
       "100013   -0.717723     -1.128742              -0.372738           0.0   \n",
       "\n",
       "        month_created  day_created  \n",
       "10           1.194938     1.061886  \n",
       "10000        1.194938    -0.387273  \n",
       "100004      -1.230969     0.216543  \n",
       "100007      -1.230969     0.337306  \n",
       "100013      -1.230969     1.544939  "
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_num.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Numerical features : 12\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 74659 entries, 0 to 99999\n",
      "Data columns (total 12 columns):\n",
      "bathrooms                74659 non-null float64\n",
      "bedrooms                 74659 non-null int64\n",
      "latitude                 74659 non-null float64\n",
      "longitude                74659 non-null float64\n",
      "price                    74659 non-null int64\n",
      "num_description_words    74659 non-null int64\n",
      "year_created             74659 non-null int64\n",
      "month_created            74659 non-null int64\n",
      "day_created              74659 non-null int64\n",
      "hour_created             74659 non-null int64\n",
      "num_photos               74659 non-null int64\n",
      "num_features             74659 non-null int64\n",
      "dtypes: float64(3), int64(9)\n",
      "memory usage: 7.4 MB\n",
      "NAS for numerical features in df : 0\n"
     ]
    }
   ],
   "source": [
    "# 对测试数据集做正规化处理\n",
    "def fillna_numerical_test(df, medians, ss_X):\n",
    "    numerical_features = df.select_dtypes(exclude=['object']).columns\n",
    "    \n",
    "    numerical_features = numerical_features.drop(['created', 'listing_id'])\n",
    "    print(\"Numerical features : \" + str(len(numerical_features)))\n",
    "    df_num = df[numerical_features]\n",
    "    df_num.info()\n",
    "    \n",
    "    print(\"NAS for numerical features in df : \" + str(df_num.isnull().values.sum()))\n",
    "    \n",
    "    # 对训练特征标准化处理\n",
    "    temp = ss_X.transform(df_num)\n",
    "    df_num = pd.DataFrame(data=temp, columns=numerical_features, index=df_num.index)\n",
    "    \n",
    "    return df_num\n",
    "\n",
    "test_num = fillna_numerical_test(test, medians, ss_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "      <th>price</th>\n",
       "      <th>num_description_words</th>\n",
       "      <th>year_created</th>\n",
       "      <th>month_created</th>\n",
       "      <th>day_created</th>\n",
       "      <th>hour_created</th>\n",
       "      <th>num_photos</th>\n",
       "      <th>num_features</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>7.465900e+04</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.015274</td>\n",
       "      <td>0.002712</td>\n",
       "      <td>-0.418414</td>\n",
       "      <td>0.970424</td>\n",
       "      <td>0.075843</td>\n",
       "      <td>20.363521</td>\n",
       "      <td>5.534847e+02</td>\n",
       "      <td>-0.105199</td>\n",
       "      <td>-1.262537</td>\n",
       "      <td>-2011.200913</td>\n",
       "      <td>0.734250</td>\n",
       "      <td>-1.181462</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.388589</td>\n",
       "      <td>0.992831</td>\n",
       "      <td>21.022619</td>\n",
       "      <td>52.894348</td>\n",
       "      <td>5.253230</td>\n",
       "      <td>14.503132</td>\n",
       "      <td>8.927887e-10</td>\n",
       "      <td>0.210486</td>\n",
       "      <td>0.138827</td>\n",
       "      <td>4.216924</td>\n",
       "      <td>4.416828</td>\n",
       "      <td>0.473050</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-2.576584</td>\n",
       "      <td>-1.382628</td>\n",
       "      <td>-1061.992448</td>\n",
       "      <td>-1689.276808</td>\n",
       "      <td>-1.951244</td>\n",
       "      <td>-0.898439</td>\n",
       "      <td>5.534847e+02</td>\n",
       "      <td>-0.364093</td>\n",
       "      <td>-1.500805</td>\n",
       "      <td>-2016.000000</td>\n",
       "      <td>-6.082784</td>\n",
       "      <td>-1.836432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.439700</td>\n",
       "      <td>-0.485772</td>\n",
       "      <td>-0.607611</td>\n",
       "      <td>-0.683395</td>\n",
       "      <td>-0.602388</td>\n",
       "      <td>10.795358</td>\n",
       "      <td>5.534847e+02</td>\n",
       "      <td>-0.364093</td>\n",
       "      <td>-1.382948</td>\n",
       "      <td>-2014.000000</td>\n",
       "      <td>-1.230969</td>\n",
       "      <td>-1.594906</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-0.439700</td>\n",
       "      <td>-0.485772</td>\n",
       "      <td>0.012628</td>\n",
       "      <td>-0.182110</td>\n",
       "      <td>-0.248138</td>\n",
       "      <td>18.670773</td>\n",
       "      <td>5.534847e+02</td>\n",
       "      <td>-0.109210</td>\n",
       "      <td>-1.265090</td>\n",
       "      <td>-2012.000000</td>\n",
       "      <td>-0.018015</td>\n",
       "      <td>-1.232616</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>-0.439700</td>\n",
       "      <td>0.411083</td>\n",
       "      <td>0.604200</td>\n",
       "      <td>0.635591</td>\n",
       "      <td>0.265660</td>\n",
       "      <td>27.262134</td>\n",
       "      <td>5.534847e+02</td>\n",
       "      <td>0.145672</td>\n",
       "      <td>-1.147232</td>\n",
       "      <td>-2011.000000</td>\n",
       "      <td>2.407892</td>\n",
       "      <td>-0.870326</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>236.754421</td>\n",
       "      <td>4.895359</td>\n",
       "      <td>55.289451</td>\n",
       "      <td>2629.886337</td>\n",
       "      <td>903.955484</td>\n",
       "      <td>675.909919</td>\n",
       "      <td>5.534847e+02</td>\n",
       "      <td>0.145672</td>\n",
       "      <td>-0.995701</td>\n",
       "      <td>-1993.000000</td>\n",
       "      <td>54.564901</td>\n",
       "      <td>2.511045</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          bathrooms      bedrooms      latitude     longitude         price  \\\n",
       "count  74659.000000  74659.000000  74659.000000  74659.000000  74659.000000   \n",
       "mean       0.015274      0.002712     -0.418414      0.970424      0.075843   \n",
       "std        1.388589      0.992831     21.022619     52.894348      5.253230   \n",
       "min       -2.576584     -1.382628  -1061.992448  -1689.276808     -1.951244   \n",
       "25%       -0.439700     -0.485772     -0.607611     -0.683395     -0.602388   \n",
       "50%       -0.439700     -0.485772      0.012628     -0.182110     -0.248138   \n",
       "75%       -0.439700      0.411083      0.604200      0.635591      0.265660   \n",
       "max      236.754421      4.895359     55.289451   2629.886337    903.955484   \n",
       "\n",
       "       num_description_words  year_created  month_created   day_created  \\\n",
       "count           74659.000000  7.465900e+04   74659.000000  74659.000000   \n",
       "mean               20.363521  5.534847e+02      -0.105199     -1.262537   \n",
       "std                14.503132  8.927887e-10       0.210486      0.138827   \n",
       "min                -0.898439  5.534847e+02      -0.364093     -1.500805   \n",
       "25%                10.795358  5.534847e+02      -0.364093     -1.382948   \n",
       "50%                18.670773  5.534847e+02      -0.109210     -1.265090   \n",
       "75%                27.262134  5.534847e+02       0.145672     -1.147232   \n",
       "max               675.909919  5.534847e+02       0.145672     -0.995701   \n",
       "\n",
       "       hour_created    num_photos  num_features  \n",
       "count  74659.000000  74659.000000  74659.000000  \n",
       "mean   -2011.200913      0.734250     -1.181462  \n",
       "std        4.216924      4.416828      0.473050  \n",
       "min    -2016.000000     -6.082784     -1.836432  \n",
       "25%    -2014.000000     -1.230969     -1.594906  \n",
       "50%    -2012.000000     -0.018015     -1.232616  \n",
       "75%    -2011.000000      2.407892     -0.870326  \n",
       "max    -1993.000000     54.564901      2.511045  "
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_num.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### default Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of each flod is : [ 0.7112944   0.70173328  0.70115019  0.69560879  0.7080214 ]\n",
      "cv logloss is : 0.703561610822\n"
     ]
    }
   ],
   "source": [
    "X_train = train_num;\n",
    "y_train = train['interest_level']\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "lr = LogisticRegression()\n",
    "\n",
    "#交叉验证用于评估模型性能和参数调优\n",
    "from sklearn.cross_validation import cross_val_score\n",
    "loss = cross_val_score(lr, X_train, y_train, cv=5, scoring='neg_log_loss')\n",
    "\n",
    "print('logloss of each flod is :', -loss)\n",
    "print('cv logloss is :', -loss.mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 正则化 Logistic Regression及参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### logistic回归需要调整参数 ：C(正则系数)和正则函数penalty(l1/l2)\n",
    "目标函数 ：J = sum(logloss(f(xi), yi)) + C*penalty"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "# 需要调优的参数\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "\n",
    "lr_penalty = LogisticRegression()\n",
    "grid = GridSearchCV(lr_penalty, tuned_parameters, cv=5, scoring='neg_log_loss')\n",
    "grid.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 0.14738679,  0.28696318,  0.32025437,  0.37293901,  0.32484965,\n",
       "         0.38022242,  0.36275182,  0.38692923,  0.33541875,  0.37472062,\n",
       "         0.35885463,  0.3941596 ,  0.35209723,  0.38731341]),\n",
       " 'mean_score_time': array([ 0.00660782,  0.00493479,  0.00511642,  0.00515079,  0.00525355,\n",
       "         0.00462971,  0.00535421,  0.00488162,  0.00497594,  0.00472274,\n",
       "         0.00485473,  0.0045733 ,  0.00520554,  0.00509725]),\n",
       " 'mean_test_score': array([-0.75848363, -0.74471114, -0.70644758, -0.70739773, -0.70364527,\n",
       "        -0.70370344, -0.70355931, -0.70356134, -0.70355312, -0.70355311,\n",
       "        -0.70355233, -0.70355236, -0.70355235, -0.70355228]),\n",
       " 'mean_train_score': array([-0.75819317, -0.74029452, -0.70562047, -0.70638565, -0.70274425,\n",
       "        -0.70280045, -0.70265132, -0.70265333, -0.70264429, -0.7026443 ,\n",
       "        -0.70264358, -0.70264346, -0.70264348, -0.70264337]),\n",
       " 'param_C': masked_array(data = [0.001 0.001 0.01 0.01 0.1 0.1 1 1 10 10 100 100 1000 1000],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False],\n",
       "        fill_value = ?),\n",
       " 'param_penalty': masked_array(data = ['l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2'],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'C': 0.001, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'penalty': 'l2'},\n",
       "  {'C': 1, 'penalty': 'l1'},\n",
       "  {'C': 1, 'penalty': 'l2'},\n",
       "  {'C': 10, 'penalty': 'l1'},\n",
       "  {'C': 10, 'penalty': 'l2'},\n",
       "  {'C': 100, 'penalty': 'l1'},\n",
       "  {'C': 100, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'penalty': 'l2'}],\n",
       " 'rank_test_score': array([14, 13, 11, 12,  9, 10,  7,  8,  6,  5,  2,  4,  3,  1], dtype=int32),\n",
       " 'split0_test_score': array([-0.75973316, -0.75249311, -0.71259595, -0.71421773, -0.71123032,\n",
       "        -0.71128863, -0.71129329, -0.7112944 , -0.71130185, -0.71130237,\n",
       "        -0.71130302, -0.71130325, -0.71130301, -0.71130334]),\n",
       " 'split0_train_score': array([-0.75710943, -0.73897689, -0.703779  , -0.70458129, -0.70084191,\n",
       "        -0.7008995 , -0.70074523, -0.70074717, -0.70073753, -0.70073777,\n",
       "        -0.70073716, -0.7007369 , -0.70073683, -0.70073681]),\n",
       " 'split1_test_score': array([-0.75927131, -0.74818811, -0.70544063, -0.70650327, -0.70185797,\n",
       "        -0.70198958, -0.7017235 , -0.70173328, -0.70171308, -0.70171295,\n",
       "        -0.7017111 , -0.70171098, -0.70171154, -0.70171078]),\n",
       " 'split1_train_score': array([-0.75780338, -0.74041623, -0.70613927, -0.70684259, -0.70325204,\n",
       "        -0.70330485, -0.70316216, -0.70316374, -0.70315547, -0.70315532,\n",
       "        -0.70315449, -0.70315454, -0.70315468, -0.70315446]),\n",
       " 'split2_test_score': array([-0.75762317, -0.74093784, -0.704457  , -0.70469726, -0.70127657,\n",
       "        -0.70123396, -0.70115888, -0.70115019, -0.70115001, -0.7011487 ,\n",
       "        -0.70114877, -0.70114863, -0.70114921, -0.70114862]),\n",
       " 'split2_train_score': array([-0.75874545, -0.74091241, -0.70619798, -0.70700874, -0.7033323 ,\n",
       "        -0.70339086, -0.70323871, -0.70324097, -0.70323195, -0.70323178,\n",
       "        -0.70323109, -0.70323092, -0.70323104, -0.70323084]),\n",
       " 'split3_test_score': array([-0.75704172, -0.73682167, -0.70022972, -0.70109327, -0.69586244,\n",
       "        -0.69603621, -0.69559266, -0.69560879, -0.69556746, -0.69556891,\n",
       "        -0.69556478, -0.69556495, -0.69556427, -0.69556456]),\n",
       " 'split3_train_score': array([-0.75925071, -0.74146176, -0.7075807 , -0.70821315, -0.70476367,\n",
       "        -0.70481388, -0.70467316, -0.70467501, -0.70466638, -0.70466636,\n",
       "        -0.70466556, -0.70466556, -0.70466542, -0.70466548]),\n",
       " 'split4_test_score': array([-0.75874889, -0.74511509, -0.70951552, -0.71047808, -0.70800039,\n",
       "        -0.70797012, -0.70802957, -0.7080214 , -0.70803455, -0.70803399,\n",
       "        -0.70803537, -0.70803533, -0.70803508, -0.70803547]),\n",
       " 'split4_train_score': array([-0.75805688, -0.73970532, -0.70440539, -0.70528246, -0.70153132,\n",
       "        -0.70159318, -0.70143736, -0.70143975, -0.70143011, -0.70143025,\n",
       "        -0.70142962, -0.70142937, -0.70142945, -0.70142928]),\n",
       " 'std_fit_time': array([ 0.01520816,  0.01041299,  0.01071726,  0.01792933,  0.0188816 ,\n",
       "         0.01647621,  0.01199555,  0.01966431,  0.00334795,  0.01698164,\n",
       "         0.0173466 ,  0.02143637,  0.01609711,  0.01857541]),\n",
       " 'std_score_time': array([  2.06129179e-03,   3.89035128e-04,   9.18521802e-05,\n",
       "          4.86810035e-04,   1.74110544e-04,   1.73102699e-04,\n",
       "          2.04373507e-04,   4.42322075e-04,   1.77654103e-04,\n",
       "          1.65114091e-04,   9.10396154e-05,   6.85502797e-05,\n",
       "          5.85114393e-04,   6.22284378e-04]),\n",
       " 'std_test_score': array([ 0.00100716,  0.00546447,  0.00426276,  0.00455726,  0.0054015 ,\n",
       "         0.00535845,  0.00552088,  0.00551532,  0.00553282,  0.00553258,\n",
       "         0.0055343 ,  0.00553433,  0.00553433,  0.0055345 ]),\n",
       " 'std_train_score': array([ 0.0007441 ,  0.00087662,  0.00136474,  0.00129688,  0.00139798,\n",
       "         0.00139485,  0.00140005,  0.00139995,  0.00140039,  0.00140027,\n",
       "         0.00140019,  0.0014003 ,  0.00140028,  0.0014003 ])}"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.703552281431\n",
      "{'C': 1000, 'penalty': 'l2'}\n"
     ]
    }
   ],
   "source": [
    "# best model\n",
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best c is %d: 1000\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [600.0, 650.0, 700.0, 750.0, 800.0, 850.0, 900.0, 950.0, 1050.0, 1100.0, 1150.0, 1200.0, 1250.0, 1300.0, 1350.0, 1400.0, 1450.0, 1500.0]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c = grid.best_params_['C']\n",
    "print('best c is %d:', c)\n",
    "TryCs = [c * .6, c * .65, c * .7, c * .75, c * .8, c * .85,\n",
    "            c * .9, c * .95, c * 1.05, c * 1.1, c * 1.15, c * 1.2,\n",
    "            c * 1.25, c * 1.3, c * 1.35, c * 1.4, c * 1.45, c * 1.5]\n",
    "\n",
    "tuned_parameters = dict(penalty = penaltys, C = TryCs)\n",
    "try_grid = GridSearchCV(lr_penalty, tuned_parameters, cv=5, scoring='neg_log_loss')\n",
    "try_grid.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-0.703552059684\n",
      "{'C': 650.0, 'penalty': 'l1'}\n"
     ]
    }
   ],
   "source": [
    "# try the best model\n",
    "print(try_grid.best_score_)\n",
    "print(try_grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\noRhjjAmI/x8SmCxV82fQ7AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a2b9e1b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    plt.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    plt.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'neg-logloss' )\n",
    "plt.savefig('LogisticGridSearchCV_C.png' )\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### 从上图中可以看出，不同正则参数 C对应的模型在训练集和测试集上的准确度。C越大性能越好。在C=125表现最好。6"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 用LogisticRegressionCV实现正则化的Logistic Regression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### L1 正则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[1, 10, 100, 1000], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=1, penalty='l1',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "Cs = [1, 10, 100, 1000]\n",
    "\n",
    "lrcv_L1 = LogisticRegressionCV(Cs=Cs, cv=5, scoring='neg_log_loss', penalty='l1', solver='liblinear', multi_class='ovr')\n",
    "lrcv_L1.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: array([[-0.54340214, -0.54340966, -0.54341089, -0.54341098],\n",
       "        [-0.53587829, -0.53587599, -0.53587572, -0.53587576],\n",
       "        [-0.53450123, -0.53449647, -0.53449623, -0.53449612],\n",
       "        [-0.53302044, -0.53301563, -0.53301535, -0.53301538],\n",
       "        [-0.5427782 , -0.54278382, -0.54278478, -0.54278488]]),\n",
       " 1: array([[-0.50318642, -0.5031915 , -0.50319203, -0.50319234],\n",
       "        [-0.49822479, -0.49822361, -0.49822353, -0.49822347],\n",
       "        [-0.49730623, -0.4973032 , -0.49730275, -0.49730276],\n",
       "        [-0.49915174, -0.49915117, -0.49915134, -0.49915128],\n",
       "        [-0.50039076, -0.50039206, -0.50039221, -0.50039203]]),\n",
       " 2: array([[-0.240258  , -0.24026662, -0.24026747, -0.24026776],\n",
       "        [-0.23715782, -0.23715783, -0.23715783, -0.2371579 ],\n",
       "        [-0.23788742, -0.23788788, -0.23788789, -0.23788792],\n",
       "        [-0.23045617, -0.23043563, -0.23043347, -0.23043373],\n",
       "        [-0.24016385, -0.24017606, -0.24017721, -0.24017759]])}"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L1.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a2b9c6400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_Cs = len(Cs)\n",
    "n_classes = 3\n",
    "scores =  np.zeros((n_classes,n_Cs))\n",
    "\n",
    "for j in range(n_classes):\n",
    "        scores[j][:] = np.mean(lrcv_L1.scores_[j],axis = 0)\n",
    "    \n",
    "mse_mean = -np.mean(scores, axis = 0)\n",
    "plt.plot(np.log10(Cs), mse_mean.reshape(n_Cs,1)) \n",
    "#plt.plot(np.log10(reg.Cs)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "plt.xlabel('log(C)')\n",
    "plt.ylabel('neg-logloss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.25512138, -0.68040224,  0.06505373,  0.18761707,  1.78290365,\n",
       "        -0.28575801, -0.05433009, -0.27625447, -0.14402877,  0.        ,\n",
       "         0.03696219,  0.06481819],\n",
       "       [ 0.14874239,  0.49804475, -0.02665443, -0.16849733, -1.16673575,\n",
       "         0.17594662,  0.0432708 ,  0.23657727,  0.13097876,  0.        ,\n",
       "        -0.02955205, -0.03086307],\n",
       "       [ 0.27671015,  0.69676424, -0.05182085, -0.17876623, -2.46983529,\n",
       "         0.28337883,  0.02776769,  0.22181392,  0.08194432,  0.        ,\n",
       "        -0.02834173, -0.11347016]])"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 稀疏系数\n",
    "lrcv_L1.coef_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### L2正则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[1, 10, 100, 1000], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=1, penalty='l2',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [1, 10,100,1000]\n",
    "lr_cv_L2 = LogisticRegressionCV(Cs=Cs, cv = 5, scoring='neg_log_loss', penalty='l2', solver='liblinear', multi_class='ovr')\n",
    "lr_cv_L2.fit(X_train, y_train)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: array([[-0.54340478, -0.54341082, -0.54341143, -0.5434115 ],\n",
       "        [-0.53588157, -0.53587585, -0.53587528, -0.53587523],\n",
       "        [-0.53449953, -0.53449621, -0.53449588, -0.53449585],\n",
       "        [-0.53301809, -0.53301521, -0.53301493, -0.5330149 ],\n",
       "        [-0.54277819, -0.54278435, -0.54278498, -0.54278504]]),\n",
       " 1: array([[-0.50318894, -0.50319219, -0.50319252, -0.50319255],\n",
       "        [-0.49822562, -0.49822335, -0.49822313, -0.49822311],\n",
       "        [-0.49730511, -0.49730287, -0.49730265, -0.49730262],\n",
       "        [-0.49914889, -0.49915105, -0.49915127, -0.49915129],\n",
       "        [-0.50039224, -0.50039226, -0.50039227, -0.50039227]]),\n",
       " 2: array([[-0.24025607, -0.24026623, -0.24026734, -0.24026746],\n",
       "        [-0.2371623 , -0.23715814, -0.23715781, -0.23715778],\n",
       "        [-0.23787713, -0.23788695, -0.23788802, -0.23788813],\n",
       "        [-0.23047791, -0.23043822, -0.23043429, -0.2304339 ],\n",
       "        [-0.24015206, -0.24017501, -0.24017741, -0.24017765]])}"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_cv_L2.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTbhUAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a2ba7e160>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_Cs = len(Cs)\n",
    "n_classes = 3\n",
    "scores =  np.zeros((n_classes,n_Cs))\n",
    "\n",
    "for j in range(n_classes):\n",
    "        scores[j][:] = np.mean(lr_cv_L2.scores_[j],axis = 0)\n",
    "    \n",
    "mse_mean = -np.mean(scores, axis = 0)\n",
    "plt.plot(np.log10(Cs), mse_mean.reshape(n_Cs,1)) \n",
    "#plt.plot(np.log10(reg.Cs)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "plt.xlabel('log(C)')\n",
    "plt.ylabel('neg-logloss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## SVM模型训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### default SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "# train_test_split 估计模型性能\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(X_train, y_train, train_size=0.8, random_state=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.svm import LinearSVC\n",
    "\n",
    "SVC1 = LinearSVC().fit(X_train_part, y_train_part)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.71      0.98      0.82      6897\n",
      "          1       0.39      0.07      0.11      2221\n",
      "          2       0.00      0.00      0.00       753\n",
      "\n",
      "avg / total       0.58      0.70      0.60      9871\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[6750  147    0]\n",
      " [2073  148    0]\n",
      " [ 669   84    0]]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    }
   ],
   "source": [
    "# 在校验集上测试，估计模型性能\n",
    "from sklearn import metrics\n",
    "y_predict = SVC1.predict(X_val)\n",
    "\n",
    "print(\"Classification report for classifier %s:\\n%s\\n\"\n",
    "      % (SVC1, metrics.classification_report(y_val, y_predict)))\n",
    "print(\"Confusion matrix:\\n%s\" % metrics.confusion_matrix(y_val, y_predict))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 线性SVM正则参数调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_grid_point_Linear(C, X_train, y_train, X_val, y_val):\n",
    "    SVC2 = LinearSVC(C = C)\n",
    "    SVC2 = SVC2.fit(X_train, y_train)\n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC2.score(X_val, y_val)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.7000303920575423\n",
      "accuracy: 0.6994225509066964\n",
      "accuracy: 0.6990173234727991\n",
      "accuracy: 0.6990173234727991\n",
      "accuracy: 0.6982068686050046\n",
      "accuracy: 0.669435720798298\n",
      "accuracy: 0.6246580893526492\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a2bac5160>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-3, 3, 7)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份  \n",
    "#penalty_s = ['l1','l2']\n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "#    for j, penalty in enumerate(penalty_s):\n",
    "    tmp = fit_grid_point_Linear(oneC, X_train, y_train, X_val, y_val)\n",
    "    accuracy_s.append(tmp)\n",
    "\n",
    "x_axis = np.log10(C_s)\n",
    "#for j, penalty in enumerate(penalty_s):\n",
    "plt.plot(x_axis, np.array(accuracy_s), 'b-')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'accuracy' )\n",
    "plt.savefig('SVM_Otto.png' )\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### RBF核SVM正则参数调优\n",
    "\n",
    "RBF核是SVM最常用的核函数。 RBF核SVM 的需要调整正则超参数包括C（正则系数，一般在log域（取log后的值）均匀设置候选参数）和核函数的宽度gamma C越小，决策边界越平滑； gamma越小，决策边界越平滑。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_grid_point_RBF(C, gamma, X_train, y_train, X_val, y_val):\n",
    "    # 在训练集使用SVC训练\n",
    "    SVC3 = SVC(C=C, kernel='rbf', gamma=gamma)\n",
    "    SVC3 = SVC3.fit(X_train, y_train)\n",
    "    \n",
    "    # 校验集上返回accuracy\n",
    "    accuracy = SVC3.score(X_val, y_val)\n",
    "    \n",
    "    print('accuracy :{}'.format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy :0.6987134028973762\n",
      "accuracy :0.6987134028973762\n",
      "accuracy :0.6987134028973762\n",
      "accuracy :0.6987134028973762\n",
      "accuracy :0.6987134028973762\n",
      "accuracy :0.6987134028973762\n",
      "accuracy :0.6990173234727991\n",
      "accuracy :0.6987134028973762\n",
      "accuracy :0.6987134028973762\n",
      "accuracy :0.6987134028973762\n",
      "accuracy :0.6987134028973762\n",
      "accuracy :0.7128963630837808\n",
      "accuracy :0.8489514740147908\n",
      "accuracy :0.9929085199067977\n",
      "accuracy :0.9978725559720393\n",
      "accuracy :0.6995238577651707\n",
      "accuracy :0.7493668321345355\n",
      "accuracy :0.9787255597203931\n",
      "accuracy :0.9984803971228852\n",
      "accuracy :0.9987843176983082\n",
      "accuracy :0.7033735183871949\n",
      "accuracy :0.7990071927869516\n",
      "accuracy :0.9982777834059365\n",
      "accuracy :0.9987843176983082\n",
      "accuracy :0.9988856245567825\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-2, 2, 5)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-2, 2, 5)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_val, y_val)\n",
    "        accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "C_s = np.logspace(-1, 2, 4)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-5, -2, 4)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_val, y_val)\n",
    "        accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEKCAYAAADjDHn2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xd8VFX6+PHPmUkPIQkltBBCCL2F\njkgXBWm6iHVdy0/FhusqsKiLZVFZUbDsoqi7KpYV9Luisgq6gAJKkyJFElpCIIUSQgqkTKac3x8z\nCZM+KZNJed6v17wyc+szw3CfOeee+1yltUYIIYSoiMHTAQghhKj/JFkIIYSolCQLIYQQlZJkIYQQ\nolKSLIQQQlRKkoUQQohKSbIQQghRKUkWQgghKiXJQgghRKW8PB1AbWnVqpWOjIz0dBhCCNGg7Nmz\n57zWunVlyzWaZBEZGcnu3bs9HYYQQjQoSqmTriwn3VBCCCEqJclCCCFEpSRZCCGEqFSjOWdRFrPZ\nTHJyMvn5+Z4ORTQifn5+hIeH4+3t7elQhKgzbksWSqn3ganAOa11nzLmK+ANYDKQC9yltd7rmHcn\nsMCx6Ata6w+rE0NycjJBQUFERkZi350QNaO1Jj09neTkZDp37uzpcISoM+7shloBTKpg/rVAV8dj\nFrAcQCnVAngWGAYMBZ5VSoVWJ4D8/HxatmwpiULUGqUULVu2lNaqaHLcliy01luACxUsch3wkbbb\nAYQopdoBE4H1WusLWusMYD0VJ50KSaIQtU2+U6Ip8uQ5iw5AktPrZMe08qYLIRy01mht/4ut+Gut\nQdu0/bljHqXmlZheYhvlTy89rXCbxfZR3r5LTLfZbNjMVmwmEzZTATaTCW0yo61W7CsWvl8oelFs\nutNtoZ2X0ZeX05c3cHkTRdvRlydp7bzp4tsqsZ9i2ywZk/NGisV9eR1dKtbL29HaeZouPr9wfafn\nVm3FJ9jAqEdn4E6eTBZl/TzTFUwvvQGlZmHvwiIiIqL2InODYcOGYTKZuHDhAnl5eXToYM9/X331\nFVW58nz16tX06tWLHj16VGn/I0eOZNmyZcTExFRpvUJLliyhffv23HbbbdVavy7ceOONLF68mKio\nqFLzvvvuO5566inMZjM+Pj4sXbqUsWPHllouPT2dm266iVOnThEVFcXnn39OcHBwjeLasCKWsyey\nLx/AnQ/IthIH3YqmOx2kRW1QlH24aSC0reipX0ISo9y8O08mi2Sgo9PrcCDVMX1siembytqA1vpd\n4F2AwYMH1+v/Qjt37gRgxYoV7N69m2XLllVrO6tXr8ZgMFQ5WdSE2Wzm448/Zu/evXW2z+p44IEH\neOWVV1i+fHmpeWFhYXz77be0a9eO/fv3M3XqVJKSkkot9+KLL3Lttdcyd+5cXnjhBV5++WVefPHF\naseUlnSRIzvO0C46mGahfiiDvRtLqct/MahS05RSUMayyqCgxHKF2yw5HTRYzGA2g9mENhdAQQG6\noMD+2mSCggIoMKFN+egCxzRTPjo/H20yofPz0KZ8yM+3PzcXoBy/yBUapW2ARjl+Dl/+a0P5+mLw\n88Xg74fRz8/+PMAfo78fBn8/DP4BGAP8MPj7YwwMwOjvjyHQH2OAP8rHx/EJKnB0+ykDqMKDu1Jg\ncHpeNN2pm9D+QdjnOC/j+Aztky9vn6LnheuU2FaJ/VW6TFF3pXJ6quz/hs7vrWhD9qkWbSUlJ4UT\nFxNJzErkRFYiCdknSL2UgkVb0Qq8lBfhQR3pHNKZqJAourbu5fqXspo8mSzWALOVUquwn8zO0lqf\nVkp9DyxyOql9DfCkp4KsC+vWrWPhwoWYTCa6du3K+++/T2BgIPPmzePbb7/Fy8uLa6+9lqlTp7J2\n7Vq2bt3Kc889V+VWSaFPPvmExYsXo7Vm+vTpLFq0CIB33nmHpUuX0r59e6Kjo2nWrBmvv/4669ev\nZ8iQIRiNRgB27NjBrFmzaNasGVdeeSXr169n3759xMfHc9ddd3Hp0iUMBgNvvfUWw4YNY8OGDbz4\n4ou0bNmS/fv3c/PNN9OtWzf+8Y9/YDKZWLNmDZGRkdx+++0EBwcTGxvLqVOn+OCDD3jvvffYuXMn\nV155Je+99x4As2bNYu/eveTl5XHzzTfzzDPPADB27FjuvfderFZrUayFBg4cWPS8b9++XLp0CbPZ\nXGr469dff82OHTsAuPPOO5k0aVKNkkXc1tMYvBSTH+iHX7Pyh9pqrdH5+dhycrDl5tofhc9zcsue\nXslznZfncpzKxwdDQID9ERjo+BuAITQQQ0AoKiAAY2AgquQyRc8DLz8PDMDg748q8W8girPYLCRd\nTCI+M55jmceIz4wnPjOexOxELDYLAAZlICIogugO3RkVMpnokGiiQ6Lp1LwT3sa6HbrtzqGzK7G3\nEFoppZKxj3DyBtBavw2sxT5s9jj2obN3O+ZdUEo9D+xybGqh1rqiE+Uu+et/DxGbml3TzRTTq31z\nnp3Wu0bbOHfuHC+99BIbN24kICCAF198kTfeeIN77rmHtWvXcujQIZRSZGZmEhISwuTJk5k5cybX\nX399tfaXnJzMggUL2L17N8HBwUyYMIFvvvmG/v3789JLL7F3714CAwMZO3YsQ4cOBWDr1q0MGjSo\naBt33303H374IUOHDmXu3LlF09u1a8f69evx8/Pj8OHD3HnnnUUtqv379xMXF0dwcDCRkZE89NBD\n7Nq1i6VLl7Js2TKWLFkCQFZWFj/++CNffPEF06ZNY/v27fTo0YOBAwfy22+/0adPH1566SVatGiB\nxWJh3LhxzJw5k169emE0GomMjOS3336jf//+5X4Gn3/+OcOGDSvzOon09HRat7bXVOvQoQOnT5+u\n1ucMYDFbOfrLGTq2NJGxeGHxg34ZB3mX+5eMRqcD+uWDtnf79qUP+M4H8DIP8vbnSq4ZcRubtpFy\nMYXjmceLHvGZ8ZzIOkGBrQCwt1M6NOtAdGg0YzuOpUtIF7qGdCUyOBJfo6+H34Gd25KF1vrWSuZr\n4OFy5r0PvO+OuOqbbdu2ERsby4gRIwAoKChg5MiRtGjRAoPBwH333ceUKVOYOnVqrexv586djB8/\nnlatWgFw2223sWXLFvLz8xk/fjyhofYG3cyZMzl16hQAp0+fZsCAAQCcP3+egoKCokRy2223sWHD\nBgBMJhOzZ89m//79eHl5ER8fX7TfYcOG0aZNGwCioqKYOHEiYP+Vv3379qLlpk2bVjS9ffv29Opl\nb1736tWLxMRE+vTpw8qVK3nvvfewWCykpqYSGxtbtFxYWBipqanlJouDBw+yYMEC1q9f79LnVZOR\nTwn70jDlWgjd+U+yLSl4hYQUHaCNrVvhU+Ev9QD7r/VAp7+O6crHR0Zk1UNaa07nnC6WEI5nHich\nM4F86+Wh1u0C2xEdEs2I9iPoEtKF6NBoooKj8Pfy92D0lWvUV3A7q2kLwF201kyaNImPP/641Lzd\nu3ezfv16Vq1axfLly/nf//5X7nacD+AzZswo6popa39VmQ7g7+9fdF1BRcstXbqUjh078sknn2A2\nm2nWrFnRPF/fy7+ODAZD0WuDwYDFYim1nPMyzssdO3aMN954g19++YWQkBBuv/32Ytc85Ofn4+/v\nz3/+8x9eeOEFwH6eKCYmhlOnTjFjxgw++eSTci+oa9myJWlpabRu3ZqUlBTatm1b7vutTNzW0wR4\nmwlNj6Pzd2vxkRL6jYLWmnO554olhcLEkGvJLVouLCCM6JBobux+I11DutIlpAtdQroQ6B3oweir\nr8kki/pqxIgRPProoyQkJBAVFUVOTg6pqam0bduW/Px8pk6dyrBhw4p+OQcFBXHx4sVS2/Hx8WHf\nvn2V7m/48OHMmzeP9PR0goODWbVqFXPnzqVv377Mnz+fzMxMAgMDWb16NYMHDwagZ8+eHD9+HIDW\nrVvj7e3N7t27GTx4MKtWrSradlZWFtHR0Sil+PDDDytMLNWVnZ1NUFAQzZs35/Tp03z//fdMmnT5\nMpxjx47Ru3dvWrduzcyZM4umZ2RkMGXKFJYsWcLw4cPL3f706dP58MMPmTt3Lh9++CHXXXdd9eI8\nn0fy4Qy6pO8gcOgQSRQNkNaa9Pz0Yq2E4xn25xfNl/8PtvRrSXRINNdHX090qP2cQlRwFMG+NRtF\nV99IsvCwNm3a8N5773HzzTdTUGDvv1y0aBH+/v7MmDEDk8mEzWbj1VdfBeDWW2/l/vvvZ+nSpdU6\nwR0eHs7ChQsZO3YsWmumTZvGlClTAJg3bx5Dhw6lQ4cO9O7du2jI6OTJk7nnnnuKtvH+++9z9913\nExQUxOjRo4uWmz17NjNnzmTlypVMmDChWMugtgwcOJBevXrRp08foqKiuPLKK4vmpaamEhwcXHTO\nwdkbb7zBiRMnePbZZ3n22WcB2LhxIy1btuTuu+/m0UcfJSYmhqeeeoqbbrqJd955h86dO/PZZ59V\nK8647fZzHW2Ofk/IC09Vaxui7mTkZxRPCo7nmabMomWCfYOJDolmcpT9RHOXkC5Eh0QT6letAhMN\njnLHrz9PGDx4sC5586O4uDh69uzpoYgankuXLtGsWTPMZjPXXXcdDz74YNE5hOnTp/P6668TFRVV\ntBzYh5peuHCBpUuXejJ0AF555RXCwsK488473b6vir5bNpvm479sIyAriX57Xqfrls0Y3JA4RdVl\nF2SXaiUczzxOen560TJB3kFFXUZdQ7sWJYWWfo2zdJBSao/WenBly0nLQhR5+umn2bRpE/n5+Uya\nNKnYSfXFixeTmppKVFQUa9as4eWXX8ZisRAZGcmKFSs8F7STli1bcvvtt3s6DJLjLnApw0Tk4bUE\nT58uicIDcsw5RecSCoelHs88zrncc0XLBHgF0CWkC6PCRxUNSe0S0oU2AW0aZVKoKWlZCFENFX23\nvnv3N5IOnGbExsfp8tUX+HXvVsfRNR15ljwSshLsySDjcvdRak5q0TJ+Rj86B3cu1kqIDommbWBb\nDEpu6SMtCyE8IO9SASf2p9Excz8B/XpJoqglJquJxKzEYq2E+Mx4ki8mU1jdydvgTefgzsSExTAz\nZGbRtQrtm7XHaJALBGtKkoUQtejozrPYrJo2h9cR+uSDng6nQTqfd57dZ3cXO6dw6uIpbI5aSF7K\ni07NO9GrZS+mdZlW1FLoGNQRL4Mc0txFPlkhaonWmrhtqYQYs2muM2l+7bWeDqnBOZV9ij+s+wMX\n8i9cLnUREs3EyIkeLXUhJFkIUWvOnbxIekoO3U+sp/mUKRgCG+bFV56SnpfOAxsewKZtfDjpQ3q3\n6l1vSl0I994pTzgZNmwYMTExRERE0Lp1a2JiYoiJiSExMbFK21m9ejWHDx+u8v5Hjhzp0kV75Vmy\nZAmffvpptdevCzfeeCMJCQllzjt37hxjx44lMDCQP/3pT+VuIz09nauuuoquXbsyceJEsrKyXN5/\n3NZUjAZNm+RthNw4s/IVRJFccy4Pb3yYtNw0ll21jIFtBkqiqGckWdSRnTt3sm/fPhYuXMjNN9/M\nvn372LdvX5UvqqtusqiJwhLlN998c53ut6oKS5SXpbBI4+LFiyvcRmGJ8mPHjjFq1Chefvlll/Zt\nLrBybNdZ2uYeJTC6E359+1Y5/qbKbDMzZ/Mc4i7E8fLol+nfuvwikMJzJFnUA+vWreOKK65g4MCB\n3HzzzeTk5AD2K6p79epFv379mD9/Pj/99BNr167lscceq1arpNAnn3xC37596dOnD089dfnq4nfe\neYdu3boVlfou/AVeVonyfv36MWLECObNm1d0Q6X4+HhGjRrFgAEDGDRoUFHF2Q0bNhRVh+3atSsL\nFizgo48+YsiQIfTr16/ofdx+++08/PDDjBs3ji5durBlyxbuvPNOevToUewK8lmzZjF48GB69+7N\nwoULi6aPHTuW7777DqvVWuo9F5ZT9/Pzq/Cz+frrr4su6rvzzjv56quvXPpM4/eeoyDfSljcWkJm\nzpRx+i7SWvP89uf5OeVn/jLsL4yLGOfpkEQ5ms45i3VPwJmDtbvNtn3h2pdqtAkpUV73JcorUt0S\n5XFbTxNozCM0P4ng6dOqte+m6K39b/Hl8S+5v9/93NT9Jk+HIyogLQsPcy5RHhMTw7///W8SExOL\nlSj/8ssvCaylk6XOJcq9vb2LSpQXTg8NDcXHx6dYEb7Tp08XHUDLKlFeyGQycc8999CnTx9uueUW\nYmNji+YVlij38/MrVaLcuYVUVolyg8FQVKIcYOXKlQwcOJCBAwcSFxdXbD+FJcpriysthMyzuaQe\ny6Ttqc00n3gNxhrehrWp+L+j/8fb+9/m+ujreTimzLsViHqk6bQsatgCcBcpUV53JcpdUZ0S5XHb\nT6PQtD25hZCn/+7Sfpq6TUmbeGHHC4zsMJJnrnhGuu0aAGlZeNiIESPYvHlz0SienJwcjh07xsWL\nF8nOzmbq1Km89tpr/Prrr0DlJcr37dtXbqIAe4nyH3/8kfT0dCwWC6tWrWLMmDEMGzaMH3/8kczM\nTMxmM6tXry5ap7wS5UCpEuXt2rWr8xLlzgpLlM+cObPo83A1UcDlEuWASyXKbVYbh7efprUliaB2\nIQQMGVL1N9XEHEg7wLzN8+jZoidLxyzF2yDXTDQEkiw8zLlEef/+/RkxYgRHjx4lKyuLKVOm0L9/\nf8aPH1+sRPmiRYuqfYLbuUR5TEwMw4cPZ8qUKURERBSVKL/mmmtKlSjfvHlz0TYKS5SPGDECg8FQ\nrET5v/71L4YPH87JkyfdXqL8vvvuc7lEeeF7//Of/8x7771HeHg4R44cAeznYAqHFT/11FN8++23\ndO3alS1btjBv3rwK4zl16AK5WQW0OfwdITfKie3KJGYlMnvjbFoHtObNq94kwDvA0yEJV2mtG8Vj\n0KBBuqTY2NhS00T5Ll68qLXWuqCgQF977bV6zZo1RfOmTZum4+Pjiy2ntdYvvPCCfvzxx+s20HK8\n/PLLesWKFXWyr8Lv1rdv7df/fPA7/VufftqcllYn+26o0nLT9MT/TNSjV43WJ7NOejoc4QDs1i4c\nY6VlIYo8/fTTDBgwgH79+tG9e/cyS5QDrFmzhpiYGPr06cP27dt58sknPRVyMXVdojw3u4CTB9Np\ne2YHwWPH4OW4r7koLcecw0MbHuJC/gWWjV9GRPMIT4ckqkhKlAtRDXFxceQlBbB9dTzDfllIjzee\np9moUZ4Oq14y28w8svERdpzewd/H/53R4aM9HZJw4mqJcmlZCFFNcVtPE2pLIzjEQOCIEZ4Op17S\nWvPctufYmrqVZ654RhJFAybJQohqsJptZJ7Ntd9je8YNKKPcL6Es//j1H6yJX8NDMQ8xo+sMT4cj\nakCShRDVYDZZMSorYed/JWTG7zwdTr302eHP+OfBf3JD1xt4oN8Dng5H1JBbk4VSapJS6ohS6rhS\n6oky5ndSSm1USh1QSm1SSoU7zbMqpfY5HmvcGacQVWGzacwFVtpmHCB4xBC827f3dEj1zsZTG1n0\nyyJGh49mwfAFMqS4EXBbslBKGYE3gWuBXsCtSqleJRZbAnykte4HLAT+5jQvT2sd43hMd1ecdUVK\nlLtfyRLlu3btok+fPkRHR/PYY4+VuY7Wmoceeojo6Gj69+/v0mdkyjWDhrYJGwm58cZai7+x2Hdu\nH/O3zKd3y968MvoVuXtdI+HOlsVQ4LjWOkFrXQCsAkpeDtsL2Oh4/mMZ8xsNKVHufiVLlD/wwAN8\n8MEHHDt2jEOHDrF+/fpS6/z3v/8lKSmJ48eP8+abb/Lww5XXKMq/ZEZhI9TnIkFjx9bmW2jwErIS\nmP3DbNoEtGHZVcvkortGxJ3JogOQ5PQ62THN2X7gBsfz3wFBSqmWjtd+SqndSqkdSqkyS6wqpWY5\nltmdlpZWm7HXKSlRbn8ftVmiPCkpifz8fIYMGYJSij/84Q9llhv/+uuvueOOOwB76+vMmTNU9F2y\nFFjt5yss+YT+7nqUt5SqKJSWm8aD6x/EqIy8PeFtWvi18HRIoha5s31YVidlyYs65gLLlFJ3AVuA\nFKCwqlyE1jpVKRUF/KCUOqi1ji+2Ma3fBd4F+3UWFQWz+JfFHL5Qu7/Ie7Towfyh82u0DSlR7p4S\n5Xl5eXTs2LEotvDwcFJSUkp9HikpKWUuV17JkPxLZgCMVhMhN9xQ5jJN0aWCSzy08SEyTBl8MPED\nOjbvWPlKokFxZ8siGXD+xoQDxWpHa61TtdYztNYDgL84pmUVznP8TQA2AQPcGKvHSIly95QoL+ti\n07JOsrq6XOGy+TlmvKz5GHy88aliF2JjZbaaeWzTYxzLOMarY1+ld6veng5JuIE7Wxa7gK5Kqc7Y\nWwy3ALc5L6CUagVc0FrbgCeB9x3TQ4FcrbXJscyVgGv3tyxHTVsA7qKlRLlbSpSHh4eTlHS5FzQ5\nOZn2ZYxaKlxu+PDhFS4HYMqzYLNpfE0XMQRIXzzYvw/PbHuGHad38PyVzzOyw0hPhyTcxG0tC621\nBZgNfA/EAZ9rrQ8ppRYqpQpHN40FjiiljgJtgBcd03sCu5VS+7Gf+H5Jax1LIyQlyqvG1RLlHTt2\nxNfXl127dqG15uOPPy6z3Pj06dP56KOPAPj5559p06ZNhV1QCo0XBSh//1p/bw3RG3vf4JuEb3hk\nwCNcH129rlHRMLh1TJvWei2wtsS0Z5ye/wf4TxnrbQOaxB3vnUuUFxQUALBo0SL8/f2ZMWMGJpMJ\nm81WrET5/fffz9KlS/nqq6+qPJrKuUS51ppp06YxZcoUgKIS5R06dChVotz5BHNhifKgoCBGjx5d\nrET5zJkzWblyJRMmTHB7ifKoqKgKS5QvX76cu+66i/z8fKZOncrVV18NwJtvvomvry/33nsv06ZN\nY926dXTp0oXAwMCie1mUZLXYKMiz4FNwEa/gEFRWZq2/t4bm07hPee+397ip203c1/c+T4cj3M2V\n0rQN4SElymtOSpSX71Jmvj6bmKUvHYrT1ry8Jv/dWp+4Xvdd0Vc/svERbbFaPB2OqAGkRLmoKilR\nXjatNfmXzBhtBXj5emPw86v1fTQke8/uZf6W+fRr3Y/FoxdjNEhdrKZASpQLUYmCfAuZZ3Pxy0sn\nICwYrxYtmux3Kz4znjvW3UELvxZ8fO3HhPiFeDokUUNSolyIWlJ4Ytvblo/RcX6mKTqbc5YHNjyA\nt8Gb5ROWS6JoYqRoixAVsFlt5Oea8TbnYAxu3mRLkV8suMhDGx8i25TNB5M+IDwovPKVRKMiLQsh\nKmDKtYAG74JLeIWGejocjyiwFvCnH/9EQmYCr419jV4tS9YDFU2BtCyEqEDeJTMGbcHL29Akr62w\naRsLti7glzO/sGjkIkZ0kDsCNlXSsqgjUqLc/UqWKH/iiScIDw8nJKTivvUXXniB6OhoevTowYYN\nG4qmmwusWAqseJsu4tUitEnek+G1Pa+x7sQ6Hh34KNO6TPN0OMKDpGVRRwoL6q1YsYLdu3ezbNmy\nam1n9erVGAwGevToUZvhVaiwRPnevXvrbJ/VUViifPny5QBcd911zJ49mz59+pS7zoEDB1i9ejWx\nsbEkJSUxadIkjhw5gsFgKCoa6G3NxRhcsmBy4/dJ7CesOLSCW7rfwj197ql8BdGoScuiHpAS5fb3\nUZslygGuuOIK2rZtW+Fn8fXXX3Prrbfi4+NDly5diIiIYM+ePWibo2igJQ+voCCUV9P6XfV94ve8\nvOtlroq4iieGPtEkW1WiuCbzP+DMokWY4mq3RLlvzx60dTrYVoeUKHdPifL+/fu79HmkpKQw1ukG\nRoUlyvv2ikHbNN4FFzG2aVetz7qh2nVmF0/+9CQxYTG8NOoluehOANKy8DgpUe6eEuWuKuuiVKUU\n+ZfMGLQNb6MNQ2DTqTB7LOMYj/7wKOFB4fxj/D/w82raV6uLy5pMy6KmLQB30VKi3C0lyl1VVinz\nNmFtKci3Fw00hjadE9tncs7w4IYH8fPy4+0JbxPs23QvQBSlScvCw6REedW4WqLcVdOnT2flypUU\nFBQQHx/PyZMn6d29HwDelhy8KhlJ1VhkF2Tz4IYHuWS+xPIJy2nfrOx7eoimS5KFhzmXKO/fvz8j\nRozg6NGjZGVlMWXKFPr378/48eOLlShftGhRtU9wO5coj4mJYfjw4UyZMoWIiIiiEuXXXHNNqRLl\nmzdvLtpGYYnyESNGYDAYipUo/9e//sXw4cM5efKk20uU33fffRWWKH/88ceJjIwkOzub8PBwXnjh\nBQC+/PLLohPj/fv35/rrr6dnz55MnjyZN998E1OuFaPVhHezgCZxj+0CawGP/vAoidmJvD7udbq3\n6O7pkER95Epp2obwkBLlNSclyrU25Zr12cQsnR0Xry3Z2eUu11i+W1abVc/ZNEf3WdFHfxP/jafD\nER6AlCgXVSUlyu1XbCs0XsqCwemcS2O1ZPcSvk/8njmD5jAlaoqnwxH1mJQoF8LBZrVxPvkSPgUX\nCWzujXebsHKXbQzfrQ8PfciS3Uv4fc/fM3/I/CZzIl8UJyXKhaii/Bz7qCxvcw7G0MZ9YnvdiXUs\n2b2EqztdzbzB8yRRiEpJshCCwrvhFWC0mfEK8MHg4+PpkNxm5+mdPPXzUwwMG8jfRv1NLroTLpFk\nIQRgKbBhMdvwLrjYqEuRH7lwhD/9+Cc6BXXi7+P/jq+x9kesicZJkoUQcLlooDZhCArycDTucfrS\naR7a8BAB3gG8fbVcdCeqRpJFHZES5e7nXKL84sWLTJ48me7du9O7d2/+8pe/lLve888/T79Bvbhy\n/EA2H9iPMjS+/xZZpiwe3PAguZZclk9YTtvAigssClFSkyn34WlSotz9nEuUK6WYP38+Y8aMwWQy\nMW7cONavX8/VV19dbJ0DBw6w+ovV/LT+Fy4k7OeGh+/nyMyZGBpRwjBZTfzxhz9y6uIp3p7wNt1C\nu3k6JNEAufV/hFJqklLqiFLquFLqiTLmd1JKbVRKHVBKbVJKhTvNu1MpdczxuNOdcXqalCi3v4/a\nLFHerFkzxowZA9jrTQ0YMIDk5ORSn8XXX3/N9dNn4udtpHvXKCI6dWLPnj3V+lzrI6vNypM/Pcne\nc3tZNHIRQ9sN9XRIooFyW8se76QrAAAgAElEQVRCKWUE3gSuBpKBXUqpNVrrWKfFlgAfaa0/VEqN\nB/4G/EEp1QJ4FhgMaGCPY92M6sbz0+dHOZ90qbqrl6lVx2aMuqlmv9KkRLn7S5RnZGSwdu1a/vzn\nP5f6PJKSkhnUd5i9FHlYaFGJ8iFDhlTr861PtNa8vOtl1p9cz7zB85jUeZKnQxINmDtbFkOB41rr\nBK11AbAKuK7EMr2AjY7nPzrNnwis11pfcCSI9UCj/KZLiXL3lig3m83cfPPNzJkzh06dOpX6PCwF\n9hsledvyMTZvDtBorjlYcWgFnx7+lDt63cEdve/wdDiigXPnOYsOQJLT62RgWIll9gM3AG8AvwOC\nlFIty1m31H0tlVKzgFkAERERFQZT0xaAu2gpUe62EuVa66LkNXv27DLfc5tWbTmTkoh382tRBgPJ\nycm0b9/wK65+k/ANr+55lUmRk5gzeI6nwxGNgDtbFmX9PCt5pJkLjFFK/QqMAVIAi4vrorV+V2s9\nWGs9uPCXb0MjJcqrpiolyp988kny8/OLurhKKsizcM1V1/Llmi+wNgssKlHu3OXWEG1P3c7TW59m\nSNshvDjyRQyq8ZysF57jzpZFMtDR6XU4UOwWZlrrVGAGgFKqGXCD1jpLKZUMjC2x7iY3xuoxziXK\nCwoKAFi0aBH+/v7MmDEDk8mEzWYrVqL8/vvvZ+nSpXz11VdERkZWaX/OJcq11kybNo0pU+wF5ApL\nlHfo0KFUiXLnE8yFJcqDgoIYPXp0sRLlM2fOZOXKlUyYMMHtJcqjoqLKLVGemJjI4sWL6dmzJwMH\nDgTg0Ucf5e677+bLL7/k4MGDPPrAXPr07M30a66h94ABeHl58dZbbzXokVCHLxzmsU2P0Tm4M6+P\nex0fY+O9El3UMVdK01bngT0RJQCdAR/sXU69SyzTCjA4nr8ILHQ8bwGcAEIdjxNAi4r2JyXKa64p\nlSi3WKz6bGKWzjiapM3p6VXeV338biVfTNZjPxurJ/zfBH3m0hlPhyMaCDxdolxrbQFmA98DccDn\nWutDSqmFSqnpjsXGAkeUUkeBNo6Egdb6AvA8sMvxWOiYJtyoKZUoN+U4rti25GIMbvhXMmfmZ/LA\n+gcwWU0sv2o5bQLbeDok0chIiXLR5GituZCaA6Z8gnxN+HQoNXaiUvXpu5Vvyee+/93HofRDvHv1\nuwxuW2m1aSGKSIlyh8aSDEXtsRRYsVpseJsvVatoYH36TlltVuZvmc/+tP38bdTfJFEIt2nUycLP\nz4/09PR69Z9beF7eJTOg8TFYUI5htq7SWpOeno6fn597gqtiLH/75W/8kPQD84fOZ2LkRE+HJBqx\nRl0bKjw8nOTkZNLS0jwdiqgntNZcyjBhtJjwCzBiqEZRRj8/P8LDwytf0M3e++09PjvyGXf3vpvf\n9/y9p8MRjVyjThbe3t507tzZ02GIeiR2ayq7Pj7MoIN/J+bbFRhDGuYd8dbEr+GNvW8wufNk/jTo\nT54ORzQBjbobSoiS4n5OISD/HOHDuzbYRLEtZRvPbn2WYe2G8cKVL8hFd6JOyLdMNBkZZ3I4c+Ii\n7VK2EnrTjZ4Op1pi02N5bNNjdAnpwutjX8fb6O3pkEQTIclCNBlxW0+jtI2O3ikEDG14VWWTLybz\n0IaHCPYN5q0Jb9HMp1nlKwlRSxr1OQshClmtNuK2JtMy/SBtfndtg6ssm5GfwYMbHsRsM/P+xPcJ\nCwjzdEiiiXGpZaGU+kIpNUUp6RwVDdPJg+nk59pof24nIdW8F4in5FnymP3DbE7nnGbZVcuICony\ndEiiCXL14L8cuA04ppR6SSlVd/f0FKIWxP6UjI85m079wvBqQBWKLTYLf97yZw6mHWTxqMUMCBvg\n6ZBEE+VSstBab9Ba/x4YCCQC65VS25RSdyul5AybqNdyMk2cOnSBdqnbaXHjDZ4Ox2Vaa17c+SKb\nkjbx5LAnuarTVZ4OSTRhLncrOW5KdBdwL/Ar9hsWDcR+Fzsh6q3DO06jUYRbjhM4cqSnw3HZuwfe\n5T9H/8M9fe7h1h63ejoc0cS5dIJbKbUa6AF8DEzTWp92zPpMKbW7/DWF8CytNbGbkwjJPEaHaWNR\nRqOnQ3LJl8e+ZNm+ZUyLmsajAx/1dDhCuDwaapnW+oeyZrhSrVAITzl9PJPsDDM9z2wn5IYXPR2O\nS35K/om/bv8rV7S7gr+O+GuDG7klGidXu6F6KqWKLndVSoUqpR5yU0xC1JrYn1MxWk1EdvXHuxql\nyOvaofOHmLN5Dt1Cu/HauNfkojtRb7iaLO7TWmcWvtBaZwD3uSckIWqHKc/C8d1naXN2F61m/s7T\n4VQqKTuJhzY+RAu/Frw14S0CvQM9HZIQRVxNFgbl1BZWShmx3ypViHrr2K6zWK0QnnuIoHFjPR1O\nhS7kX+CBDQ9g1VaWT1hOK/9Wng5JiGJcPWfxPfC5UuptQAMPAN+5LSohakHs5lME5qTS8ZrBKJ/6\n+9sm15zL7I2zOZt7ln9d8y86B0ulZFH/uJos5gP3Aw8CCvgf8C93BSVETaWnXCItJY+up7cRunCe\np8Mpl8VmYd6WeRxKP8RrY18jJizG0yEJUSaXkoXW2ob9Ku7l7g1HiNoRuzUVpa10bluAbz29p4nW\nmhd2vMCW5C08PfxpxkeM93RIQpTL1essugJ/A3oBRfeT1FpLkRpR71jNNo5sTaZ12n7C7pru6XDK\n9fb+t/ni2BfM6jeLm7rf5OlwhKiQqye4P8DeqrAA44CPsF+gJ0S9c+LAeUwm6JC1j6BrrvF0OGX6\n4ugXvLX/La7rch2zY2Z7OhwhKuVqsvDXWm8ElNb6pNb6OUDazKJeOrTpJL6mDDqP6YHBz6/yFerY\n5qTNPL/jea7scCXPjnhWLroTDYKrJ7jzHeXJjymlZgMpgBTUF/XOxQv5JB/LJvL0dkLn3+vpcEo5\nkHaAuZvn0r1Fd14d8yreBrnoTjQMrrYs/gQEAH8EBgG3A3dWtpJSapJS6ohS6rhS6oky5kcopX5U\nSv2qlDqglJrsmB6plMpTSu1zPN52/S2JpixuWyqgiAzOwK9H/aqkfzL7JLM3zqaVfyvevOpNArwD\nPB2SEC6rtGXhuADvJq31POAScLcrG3as9yZwNZAM7FJKrdFaxzottgD4XGu9XCnVC1gLRDrmxWut\nZRyhcJm2aeI2nyI04zDtb5jo6XCKOZ93ngfWPwDA21e/LRfdiQan0paF1toKDFJV71gdChzXWido\nrQuAVcB1JTcPNHc8DwZSq7gPIYokH8ng0kUb7dP30HzyFE+HUyTXnMvDGx/mfN55ll21jE7NO3k6\nJCGqzNVzFr8CXyul/g/IKZyotV5dwTodgCSn18nAsBLLPAf8Tyn1CBAITHCa11kp9SuQDSzQWv9U\ncgdKqVnALICIiAgX34porGK3JOFlyaXLsA4Ym9WPukpWm5W5m+dy+MJh/j7u7/Rr3c/TIQlRLa6e\ns2gBpGMfATXN8ZhayTpltUR0ide3Aiu01uHAZOBjx4n000CE1noA8DjwqVKqeYl10Vq/q7UerLUe\n3LoB3SpT1L78HDMJ+8/T9swvtLpxhqfDKfLOgXf4KeUnnhr6FGM6jvF0OEJUm6tXcLt0nqKEZKCj\n0+twSncz3QNMcuxju1LKD2iltT4HmBzT9yil4oFugNxoSZTp6C9nsdkUnXxS8Ovf39PhAPBzys+8\nvf9tpneZLhfdiQbP1Su4P6B0qwCt9f+rYLVdQFelVGfsQ21vAW4rscwp4CpghVKqJ/arw9OUUq2B\nC1prq1IqCugKJLgSq2iaDv2QQNDFU0RcP6ZeXLdw+tJpnvjpCaJDo1kwfEG9iEmImnD1nMU3Ts/9\ngN9RyclorbXFcU3G94AReF9rfUgptRDYrbVeA8wB/qmUegx7MrpLa62VUqOBhUopC2AFHtBaX6jS\nOxNNRtqpi1xIs9At7ReCpy/ydDiYrWbmbJ6DxWbh1TGv4u/l7+mQhKgxV7uhvnB+rZRaCWxwYb21\n2IfDOk97xul5LHBlOfv7ouR0IcpyaEsSBpuZ6D7NMYaEVL6Cm72y+xUOnj/Ia2NfIzI40tPhCFEr\nXD3BXVJXQIYfCY+zFFg5uuM0rdP2EXaT5++Gt+7EOlYeXskdve5gQqcJla8gRAPh6jmLixQ/Z3EG\n+z0uhPCo+F/TMFsUHW3HCRj2Z8/GkhnPs9ueZWDYQP406E8ejUWI2uZqN1SQuwMRojpif0jAL+88\nUZOHevQkcq45l8c3PY6/lz+vjHlFaj6JRselbiil1O+UUsFOr0OUUte7LywhKpeVlkfqyXzand1B\n6AzPfR211jy37TkSsxN5ZfQrhAVIjU3R+Lh6zuJZrXVW4QutdSbwrHtCEsI1cT8ng7YR3cWIlwcv\nylx5eCXrEtcxO2Y2Q9sN9VgcQriTq8mirOVcHXYrRK2z2TRxW07R8kIc7W+qrJiA++xP288ru19h\nTPgY7ul7j8fiEMLdXE0Wu5VSryqluiilopRSrwF73BmYEBVJir1Abp4iPD+WwJEjPRJDRn4GczfP\npU1AG14c+SIGVd3BhULUf65+ux8BCoDPgM+BPOBhdwUlRGUObYjHu+Ai0RN6o4zGOt+/1WbliZ+e\nID0vnaVjlxLsG1z5SkI0YK6OhsoBSt28SAhPyLtYwMnD2XQ4t4uWMx/0SAzvHniXbanbeOaKZ+jd\nsrdHYhCiLrk6Gmq9UirE6XWoUup794UlRPkOb0/FhoEubfPw7tChzve/NWUry/cvZ3qX6czsOrPO\n9y+EJ7jaDdXKMQIKAK11BnIPbuEBWmsObUigefYJOs68ps73LwUCRVPlarKwKaWKynsopSIpowqt\nEO52NjGbrGzokL2foPHj6nTfZquZuZvnYraZpUCgaHJcHf76F+BnpdRmx+vROO5QJ0RdOrQxAYPV\nRLdRnVA+PnW671d2v8KB8wdYOmapFAgUTY5LLQut9XfAYOAI9hFRc7CPiBKizphNVo7vTSfs3F5a\n1/Hd8AoLBP6h1x+4JrLuu7+E8DRXCwneCzyK/W53+4DhwHbst1kVok4c33MWi81AVPAFfKM619l+\nCwsEDggbwGODHquz/QpRn7h6zuJRYAhwUms9DhgApLktKiHK8Nv3RwnIPUvnGaPrbJ/FCgSOlgKB\noulyNVnka63zAZRSvlrrw0B394UlRHEZZ3I4d9ZG+wt7aT5pYp3sU2vNc9vtBQJfHv0ybQLb1Ml+\nhaiPXD3Bney4zuIrYL1SKoNKbqsqRG2K/TERpa10H9QSg59fnexz1ZFVrDuxjj8O+CPD2g2rk30K\nUV+5egV34S3InlNK/QgEA9+5LSohnFitNg5vS6Vl+iHaPlY3pcgPpB3g5V0vS4FAIRyqXDlWa725\n8qWEqD0nD6aTbzbS2ycFvx493L6/jPwM5myeIwUChXAiZcZFvXfou8P4mLLoOm2I2/dltVl58qcn\nSc9L5+PJH0uBQCEc5CeTqNdyskwkJZpol76HkGmT3b6/dw+8y9bUrTwx9AkpECiEE0kWol6L23wK\njYGuvfwwNmvm1n0VFgicFjWNG7vd6NZ9CdHQSLIQ9ZbWmthNJwjOPE7ELe69G15hgcAuIV14+oqn\npUCgECW4NVkopSYppY4opY4rpUrdD0MpFaGU+lEp9atS6oBSarLTvCcd6x1RStXNwHpRr5w+nsXF\nXC8idDx+/fu7bT/OBQJfG/uaFAgUogxuO8GtlDICbwJXA8nALqXUGq11rNNiC4DPtdbLlVK9gLVA\npOP5LUBvoD2wQSnVTWttdVe8ov75bd1hjJY8ekzq49Zf+kt2L5ECgUJUwp0ti6HAca11gta6AFgF\nXFdiGQ00dzwP5vKFftcBq7TWJq31CeC4Y3uiiSjIs5AQd5E253+lxfXu64Jad2Idnx7+VAoEiobN\nanb7LtyZLDoASU6vkx3TnD0H3K6USsbeqnikCuuilJqllNqtlNqdlialqhqToztSsGoj0ZEar9BQ\nt+wjITNBCgSKhstmg6Pfw8e/g/+7y+27c2eyKKvfoOQNk24FVmitw4HJwMdKKYOL66K1fldrPVhr\nPbh169Y1DljUH4e+P0pgTiqdb57glu3nmnN5bNNjUiBQNDz5WbBjOSwbBJ/eBOfioMNA0O69H507\nL8pLBjo6vQ6ndD2pe4BJAFrr7UopP6CVi+uKRio99RLnM410z48jcNhttb595wKB71z9jhQIFA3D\n+WPwy7uw71MouAQdh8H4BdBzOhjd/2PHncliF9BVKdUZSMF+wrrk//xTwFXACqVUT8APe+nzNcCn\nSqlXsZ/g7gr84sZYRT3y29rDKJuFnmM7owy13/gtLBD4yIBHGN5ueK1vX4haY7NB/EbY+TYc3wBG\nH+hzAwydZW9N1CG3JQuttUUpNRv4HjAC72utDymlFgK7tdZrsN9x759KqcewdzPdpbXWwCGl1OdA\nLGABHpaRUE2D1WLj6N50WqX/RtiNf6j17RcWCBwdPpp7+95b69sXolbkZ8P+lbDzHbgQD83awri/\nwKC7oFmYR0Jya20orfVa7Ceunac94/Q8FriynHVfBF50Z3yi/jmx5wwFNm+i2uTiHVa7/yky8zOL\nCgQuGrlICgSK+ic93t7V9Ou/oeAihA+BcU/Zu5q86vae8yVJIUFRrxxcG4tvfhZd7xhZq9u1aRtP\n/PyEvUDgtVIgUNQjNhsk/GBvRRz7Hxi8oc8MGHo/hA/ydHRFJFmIeuNSRj6pZyDq0kGaj3m6Vrf9\nzoF32JqylaeHP03vVlIgUNQDpouwf5U9SaQfg8AwGPskDLobgurfoAtJFqLeOPT9UVAGegxvgzIa\na22721K2sXyfFAgU9UR6POz6F/z6CZiyof1AmPFP6HW9x7uaKiLJQtQL2qaJ25pKaMYJOtwyvda2\neybnDPN/mk+XkC4sGL5ACgQKz9AaEn60tyKOfg8GI/T+HQx7AMIHezo6l0iyEPVC8uF0csw+dAs6\nj094qYv1q8VsNTNn0xzMNjOvjn2VAO+AWtmuEC4zXYIDq2Dnu3D+CAS2hjF/tnc1NW/n6eiqRJKF\nqBcOfn0QL3MuPWbUXgkw5wKBnYM719p2hajUhRP2rqa9H4MpC9rFwO/esbcmvHw9HV21SLIQHpef\nY+bkSQsdsg4QevXcWtlmYYHA23veLgUCRd3QGk5stnc1HVln72rqdZ2jq2kINPAuUEkWwuMO/xiP\nDSPd+jdH+dT8BF9hgcCY1jE8PvjxWohQiAoU5MCBz+xJIu0wBLSC0XNh8P+D5u09HV2tkWQhPC72\nhxM0u3iOzr+v+T22nQsELhmzRAoECvfJOAm7/gl7P7IX92vbD65fDr1ngLefp6OrdZIshEelncom\nI9eX3j7J+EZF1WhbWmv+uv2vUiBQuI/WkPiTo6tpLaCg13R7V1PHYQ2+q6kikiyERx34cj8Gm5me\nk2t+odxnRz5j7Ym1UiBQ1L6CXDj4uT1JnIsF/xYw8jEYfA8E187ovfpOkoXwGIvZSnxcDq0zY2k9\n9cEabetg2kEW71osBQJF7co8Bb8UdjVlQpu+cN2b9sqv3k3rXu2SLITHHN96EjM+dOvqhcG/+v/x\nCgsEhvmHSYFAUXNaQ+LP9rLghV1NPafau5oirmjUXU0VkWQhPOa3dUfwy7tI199X/254hQUCz+ed\nlwKBombMeXCgsKvpEPiHwpWP2ruaQjpWvn4jJ8lCeERWWi5ns3zpatuPf6+bqr0dKRAoaiwzCXa/\nB3tWQF4GtOkD0/8BfW9scl1NFZFkITzit6/2g7bR66ou1d5GYYHAqVFTpUCgqBqt4eQ2+OUdiPsG\n0NBjir2rqdOVTbarqSKSLESds9k0R37NoEVWIu1m3lGtbTgXCHx6+NNSIFC4xpwHB/9j72o6exD8\nQmDEbBhyL4REeDq6ek2Shahzp35NJc/mR99wM8Zmzaq8vtlqZs5mKRAoqiArGXYVdjVdgLBeMO0N\n6HsT+Mj3xxWSLESdO/j1AbzNZnrcMqpa6y/ds5QDaVIgUFRCazi1wz6qKe6/gIbuk2HY/RA5Srqa\nqkiShahTeZcKSDrrRUT+bzQbNK3K63934jv+HfdvKRAoymfOh9++sCeJMwfALxiueMje1RQa6eno\nGixJFqJOHfrvQbQy0mtkhyqfZ0jIkgKBogLZqY6upg8gNx1a94Cpr0G/m8En0NPRNXiSLESd0VoT\nt/U0zS+mEXHL9VVaN9ecy+M/Po6v0ZdXxrwiBQKFndaQ9Iujq2kN2KyOrqZZ0HmMdDXVIkkWos6c\nOXqebEsAMS2z8AoNdXm9wgKBCVkJvHP1O7QNbOvGKEWDYDHBb6vtSeL0PvANtg97HXIvtJDzWO7g\n1mShlJoEvAEYgX9prV8qMf81YJzjZQAQprUOccyzAgcd805prWvvxszCIw58sReDVdNr5rAqrVdY\nIHB2zGyuaH+Fm6ITDUL2adj9vr2rKScNWnWDKUuh3y3gW/WRdcJ1bksWSikj8CZwNZAM7FJKrdFa\nxxYuo7V+zGn5R4ABTpvI01rHuCs+UbfMBVYST2ra5h4hZOQjLq9XWCBwVIdR3NfvPjdGKOotrSF5\nt70VEfuVvaup20T7qKaocdLVVEfc2bIYChzXWicAKKVWAdcBseUsfyvwrBvjER505PtYLMqH7gND\nUQbXCv05Fwj826i/SYHApsZigkNf2ZNE6l7wbQ5DZ9m7mlpW/8p/UT3uTBYdgCSn18lAmf0PSqlO\nQGfgB6fJfkqp3YAFeElr/ZW7AhXud2hjAv65eUTfPtGl5W3axpM/PykFApui7FTY86G9uynnHLTs\nCpOXQP9bwDfI09E1We5MFmW1DXU5y94C/EdrbXWaFqG1TlVKRQE/KKUOaq3ji+1AqVnALICICLlU\nv77KSMnmfH4QPQNP4tPGtbvXvXvgXX5O+VkKBDYV6fH2C+cOfwPJu+zTujp1NbnYGhXu485kkQw4\n1/UNB1LLWfYW4GHnCVrrVMffBKXUJuznM+JLLPMu8C7A4MGDy0tEwsP2f/YLSmt6T+/j0vLbUrfx\n1r63pEBgY6a1fRRT3Ddw+FtIi7NPbxcD4xZAnxnS1VTPuDNZ7AK6KqU6AynYE8JtJRdSSnUHQoHt\nTtNCgVyttUkp1Qq4EnjZjbEKN7FZbRw/YqLVpVOEXVP5CeozOWd4YssTUiCwMbJa4NR2e+vh8LeQ\nlQTKYK/yOmixveqr3Dei3nJbstBaW5RSs4HvsQ+dfV9rfUgptRDYrbVe41j0VmCV1tq5ZdATeEcp\nZQMM2M9ZlHdiXNRjCVuOYVL+dO3pi/Kq+OtWWCDQZDVJgcDGwpwH8T/aE8SRdfYifl5+0GU8jH0S\nuk2CwJaejlK4wK3XWWit1wJrS0x7psTr58pYbxvQ152xibrx29rD+BRoev6h8jpOhQUCl4xZIgUC\nG7K8TDj2P/s5iOMbwZxjv2iu20T77Um7XCXXRDRAcgW3cJucjDxSswOIMh7Br1PF5T2cCwROjHRt\nxJSoR7JPw5Fv7ecgEn8CmwWatbWPYOo5FTqNBC8fT0cpakCShXCbg5/vRCsjva+JrnC5wgKB/Vv3\n5/FBUiCwwTh/HA7/137+oXAEU4sucMXD0GMadBgko5gaEUkWwi201hz5NYuQnAuEX/f7cpfLNecy\nZ9McfI2+LBmzBG+jFAist4qNYPoG0g7bp7eLgfEL7AmidXe5orqRkmQh3CJl7ykuEcTgTudRPmV3\nP2itWbhjIfGZ8VIgsL6yWuDUtstDXLOTQRmh0wgY/P/sFV5lBFOTIMlCuMWB1fswWrzpffuYcpf5\n/MjnfJvwrRQIrG/MeRD/gz05lBzBNO4p6H4tBLTwdJSijkmyELXOlGfmVJov7W0naNZjcpnL/Hb+\nNxbvWszIDiOlQGB9kJcBR/9nPwdxfCOYc+13mOs2CXpMheir5AZCTZwkC1HrYv/zC1aDD71Gh5c5\nPzM/k8c3PU4r/1b8baQUCPSY7FR76+HwN5D4s9MIplvtI5giR4GcQxIOkixErTu8/QyBeQV0vum6\nUvOcCwR+dO1HhPiFeCDCJuz8MUcNpm8hZbd9WstouGI29JwG7QfKCCZRJkkWoladP3qGC7ZQ+rY5\ngTGg9BXYhQUCFwxbQJ9WrtWKEjWgNaT+am89xH0D54/Yp7cfAOOftncxyQgm4QJJFqJW7V/1C8rm\nT9+bhpaaV1ggcErUFG7qfpMHomsirBY4ufVyDabslMsjmIbcY6/BFFx2F6EQ5ZFkIWqNxWwlIclA\nmCWR0MFXF5vnXCDwmeHPSIHA2laQe3kE09F19hPWXn720hrjF9hPVMsIJlEDkixErTn2zV4KjAH0\niCleGM5sNTN381wpEFjb8jLg6Pf2cxDxPziNYLrW3nqQEUyiFkmyELXm0I+J+BYY6f6H4q2KV/e8\nyv60/VIgsDaUNYIpqB3E3GY//xA5UkYwCbeQZCFqRXZqBmdNoXRvfhLv5pdvffld4nd8EveJFAis\niaIRTN9Ayh77tJZdYcQj9gQhI5hEHZBkIWrFgX9vBRVA3+v7F01LyErg2a1SILDKtIbUvZdrMJ0/\nap9eOIKpp6MGkxB1SJKFqDFt0xw7aqaF+RRhY+4EpEBglVnNjhFM3xYfwRR5JQy5D3pMlhFMwqMk\nWYgaS/zhILnGYPp1N6OUKlYg8O2r35YCgeUpGsHkuItcfiZ4+dtPTMsIJlHPSLIQNfbb2ji8LM3o\nfcdVwOUCgQ/HPMyI9iM8HF09k3vBPoLp8Df2GkyWvMsjmHpOtRfrkxFMoh6SZCFqJC8jh+RLIXTy\nS8EvrGWxAoGz+s3ydHieZzFBZhIk/Gg/SZ34M2grBLWHAbc77iJ3pYxgEvWeJAtRI7/9+ydsBh96\nT+pOZn4mczbNaVoFAvOz7MkgK+nyX+fnl85eXrZlV7jyj/abBLUfICOYRIMiyULUyJH92QRZrHSY\nNJNHNv2RtLy0xlMg0AubcIUAAAwrSURBVGaDnHOOA/8px9/k4snAlF18HaOv/UR0cDh0vRqCI+w3\nB+owSEYwiQZNkoWottM7j5BlbMWAiHO8d+j9hlcg0GKyjzoq1jJIvpwYslPAWlB8Hb9gRwKIsI9U\nCu5oTwbBjkdga2kxiEZJkoWotgOrf8VgC8U2sTlv7ltU/woE5mfZD/5FyeBU8ZbBpbOAdlpBQVBb\n+0G//QDoNd2RDCIcrYWO4NfcU+9GCI+SZCGqxZxrIjG9GWHGFJ5KWEFUcFTdFggs7CLKSnYkgaTS\n3USmrOLrGH0uH/SjJ1xuEYR0tE9vHg5eZd8vXIimzq3JQik1CXgDMAL/0lq/VGL+a8A4x8sAIExr\nHeKYdyewwDHvBa31h+6MVVRN3KqfsHgFcLjdbnuBwHG1XCDQUgDZySVaBk4nkLOSS3cR+QZfTgAR\nVzglA0fLIDBMuoiEqCa3JQullBF4E7gaSAZ2KaXWaK1jC5fRWj/mtPwjwADH8xbAs8Bg7P0Eexzr\nZrgrXlE1cTvP4Wv24fOOP7H4yleICo6q2gbysy8f9MtqGVw8Q/EuIuy3/AzpCO1i7DWRQiKKtwz8\ngmvt/QlRE1prLDZNvtmKyWIr9jffbMNksWJy/M136a+t1LZMZmvR8x5tg/jg7tL3kKlN7mxZDAWO\na60TAJRSq4DrgNhylr8Ve4IAmAis11pfcKy7HpgErHRjvMJFF+JOcZ4w8gzruLXP75kUOan4AjYb\n5KSVfZ6g8ARyfhldRM072A/8Xa6yH/ydu4madwAv37p7k6JR0FpjtuoKD8YVHbTLOtiXPGCXN9+m\nK4+vPF4GhZ+3EV8vQ9Ff36LXBkL8vfFr7ls0r3OrZrX3oZUXkxu33QFIcnqdDAwra0GlVCegM/BD\nBet2cEOMQmv7w/7Cpec7P9wIdCRpYBJLjP1h02KnoaVJkJUCVlPx/fg2v3zgjxjulAwcQ0uli6ja\ntNZoDTatsWnQFH9tc8zXTq9tWoOm2OvCr0Lha5tjHY1jms1pWzhvu3DZ4tsq66/NKQ7neDSFr+37\nMVvL/jVd0UG7vGTg1oN2gA9+3gZ8vYz4eRtKLVt6ndJ/Sy3rZcDLWP/+L7gzWZR1prO8f7ZbgP9o\nra1VWVcpNQuYBRAREVGdGDm+fzebXjtSrXXrhxr8T6gms3dbfAoO82T6Brz/+z0A6SqUc4bWnFXt\nOWfszznv1pxVYZw1tOasIYxcFQj5wBnHo0gucMTxaJwKD4SO4/Plg7GtxMG4vANpuQfewoOsZ9/f\n/2/vbmPlqOo4jn9/29sWYolAW2iFKlQb1MageAWkjUExhjQGfMCAmlgixBAl0VeKwWgsL0wl8YVR\nIxVJMCFAKLRUKAHkwcYXhd42fbQoLUEtfRRMtRGBtn9fnLN2u93d2b33zuza+/skNzu7c2b2P+fu\nzn/mzOw5Veh1p91u591pp9288x7UnXa/lJksdgFzGp6fC+xuU/Y64BtNy17etOyzzQtFxDJgGcDw\n8PCovjJDU09Fsbeg1OAPAdr7xo9+mya/uZ/D57zC/bOW8trQ2fxjaCaHa63vIhrCp4QAkhBQk6gp\nPUpC4rjnNZFfU34tzwNqNTXMA1Evr2OvNT2vr0MNz2sCmp4fF1+tIT6OL1NrWpfaPB6bboqPhjK1\nY9vWvM7Jk2rH7cS90+4/RUmHJZKGgD8DVwCvAOuAL0XEtqZyFwCPA+dHDiZf4F4PXJSLbQA+XL+G\n0crw8HCMjIyM+3aYmZ3MJK2PiOGicqWdWUTEYUk3kxLBJOCuiNgmaQkwEhGrctEvAvdFQ9aKiNck\n3UZKMABLOiUKMzMrV2lnFlXzmYWZWe+6PbNwQ6CZmRVysjAzs0JOFmZmVsjJwszMCjlZmJlZIScL\nMzMrdNLcOivpAPCXMaxiBvD3cQpnPDmu3jiu3jiu3pyMcb0rImYWFTppksVYSRrp5l7jqjmu3jiu\n3jiu3kzkuNwMZWZmhZwszMyskJPFMcv6HUAbjqs3jqs3jqs3EzYuX7MwM7NCPrMwM7NCEzZZSLpd\n0guSNktaIen0NuWulPQnSTsk3VJBXF+QtE3SUUlt726Q9LKkLZI2Siq9u90e4qq6vs6U9KSkF/Pj\nGW3KHcl1tVHSqlZlximejtsvaaqk+/P85ySdV1YsPcZ1vaQDDXV0YwUx3SVpv6StbeZL0k9zzJsl\nXdSqXB/iulzSwYa6+n5Fcc2R9Iyk7fm7+M0WZcqrs8hj6E60P+BTwFCeXgosbVFmErATmAtMATYB\n7y85rvcBF5BGBhzuUO5lYEaF9VUYV5/q68fALXn6llb/xzzvUAV1VLj9wNeBX+bp64D7BySu64Gf\nVfV5yu/5MdIAZ1vbzF8EPEYa1vFS4LkBiety4JEq6yq/72zgojx9Gmlwueb/Y2l1NmHPLCLiiYg4\nnJ+uJQ3d2uxiYEdEvBQRbwL3AVeXHNf2iBi4Aam7jKvy+srrvztP3w18puT366Sb7W+MdzlwhaSy\nx+3tx/+lUESsAToNanY18JtI1gKnS5o9AHH1RUTsiYgNefpfwHZOHLW4tDqbsMmiyVdJ2bjZOcDf\nGp7vYnCGlA7gCUnrJX2t38Fk/aivsyNiD6QvE3BWm3KnSBqRtFZSWQmlm+3/X5l8sHIQmF5SPL3E\nBfD53HSxXNKckmPqxiB//z4qaZOkxyTNr/rNc/Plh4DnmmaVVmelDas6CCT9DpjVYtatEfFwLnMr\ncBi4p9UqWrw25tvHuomrCwsiYreks4AnJb2Qj4j6GVfl9dXDat6Z62su8LSkLRGxc6yxNelm+0up\nowLdvOdvgXsj4g1JN5HOfj5RclxF+lFX3dhA6iLjkKRFwEpgXlVvLmka8CDwrYj4Z/PsFouMS52d\n1MkiIj7Zab6kxcCngSsiN/g12QU0HmGdC+wuO64u17E7P+6XtILU1DCmZDEOcVVeX5L2SZodEXvy\n6fb+Nuuo19dLkp4lHZWNd7LoZvvrZXZJGgLeTvlNHoVxRcSrDU9/RbqO12+lfJ7GqnEHHRGrJf1C\n0oyIKL3PKEmTSYninoh4qEWR0upswjZDSboS+A5wVUT8u02xdcA8SedLmkK6IFnanTTdkvQ2SafV\np0kX61veuVGxftTXKmBxnl4MnHAGJOkMSVPz9AxgAfDHEmLpZvsb470GeLrNgUqlcTW1a19Fag/v\nt1XAV/IdPpcCB+tNjv0kaVb9OpOki0n70Vc7LzUu7yvg18D2iPhJm2Ll1VnVV/QH5Q/YQWrb25j/\n6neovANY3VBuEemug52k5piy4/os6ejgDWAf8HhzXKS7Wjblv22DElef6ms68BTwYn48M78+DNyZ\npy8DtuT62gLcUGI8J2w/sIR0UAJwCvBA/vw9D8wtu466jOtH+bO0CXgGeG8FMd0L7AHeyp+tG4Cb\ngJvyfAE/zzFvocPdgRXHdXNDXa0FLqsoroWkJqXNDfutRVXVmX/BbWZmhSZsM5SZmXXPycLMzAo5\nWZiZWSEnCzMzK+RkYWZmhZwszHog6dAYl1+ef0WOpGmS7pC0M/ciukbSJZKm5OmT+kez9v/FycKs\nIrkPoUkR8VJ+6U7Sr7fnRcR8Us+vMyJ19vcUcG1fAjVrwcnCbBTyL2Rvl7RVaVyRa/Prtdz9wzZJ\nj0haLemavNiXyb8wl/Ru4BLgexFxFFJXJBHxaC67Mpc3Gwg+zTUbnc8BHwQuBGYA6yStIXUlch7w\nAVIPuNuBu/IyC0i/DgaYD2yMiCNt1r8V+EgpkZuNgs8szEZnIamX1iMRsQ/4PWnnvhB4ICKORsRe\nUtcZdbOBA92sPCeRN+t9gJn1m5OF2ei0G7Co00BGr5P6hoLUt9CFkjp9B6cC/xlFbGbjzsnCbHTW\nANdKmiRpJmkozueBP5AGEapJOps0BGfdduA9AJHG0hgBftjQg+k8SVfn6enAgYh4q6oNMuvEycJs\ndFaQev/cBDwNfDs3Oz1I6ql0K3AHaSSzg3mZRzk+edxIGtRph6QtpHEk6mMPfBxYXe4mmHXPvc6a\njTNJ0yKNojaddLaxICL2SjqVdA1jQYcL2/V1PAR8NwZwPHabmHw3lNn4e0TS6cAU4LZ8xkFEvC7p\nB6Qxkf/abuE8QNFKJwobJD6zMDOzQr5mYWZmhZwszMyskJOFmZkVcrIwM7NCThZmZlbIycLMzAr9\nFzygYuxdoZQeAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a31e65e80>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    plt.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'accuracy' )\n",
    "plt.savefig('RBF_SVM_Otto.png' )\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " gamma越大，对应RBF核的sigma越小，决策边界更复杂，可能发生了过拟合。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 进行最终的预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy :0.9988856245567825\n"
     ]
    }
   ],
   "source": [
    "SVC_finall = SVC(C=C_s[4], kernel='rbf', gamma=gamma_s[4])\n",
    "SVC_finall = SVC_finall.fit(X_train, y_train)\n",
    "\n",
    "# 校验集上返回accuracy\n",
    "accuracy = SVC_finall.score(X_val, y_val)\n",
    "    \n",
    "print('accuracy :{}'.format(accuracy))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = SVC_finall.predict(test_num)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: 0, 1: 1, 2: 2}"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels2idx = {label: i for i, label in enumerate(SVC_finall.classes_)}\n",
    "labels2idx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>listing_id</th>\n",
       "      <th>interesting_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7142618</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7210040</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>7103890</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1000</th>\n",
       "      <td>7143442</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100000</th>\n",
       "      <td>6860601</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        listing_id  interesting_level\n",
       "0          7142618                  0\n",
       "1          7210040                  0\n",
       "100        7103890                  0\n",
       "1000       7143442                  0\n",
       "100000     6860601                  0"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 导出数据\n",
    "sub = pd.DataFrame()\n",
    "sub['listing_id'] = test['listing_id']\n",
    "sub['interesting_level'] = y\n",
    "\n",
    "sub.head()\n",
    "sub.to_csv(\"submission_rf.csv\", index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
